UNIXシステムコール 標準入力から読んでECHOせずに標準出力に表示する
ECHOするプログラム
#include <stdio.h> int main(void) { int c; while ((c = getchar()) != EOF) { putchar(c); } }
ECHOしないプログラム
#include <stdio.h> #include <termios.h> #include <unistd.h> int main(void) { int c; struct termios new, old; tcgetattr(STDIN_FILENO, &old); /* 現在の端末設定を取得 */ new = old; new.c_lflag &= ~ECHO; /* ECHOフラグをオフにする */ tcsetattr(STDIN_FILENO, TCSANOW, &new); /* 設定を反映させる */ while ((c = getchar()) != EOF) { putchar(c); } tcsetattr(STDIN_FILENO, TCSANOW, &old); /* 設定を元に戻す */ }
9 tcgetattr(STDIN_FILENO, &old); /* 現在の端末設定を取得 */ (gdb) n 10 new = old; (gdb) 11 new.c_lflag &= ~ECHO; /* ECHOフラグをオフにする */ (gdb) p new $1 = {c_iflag = 17664, c_oflag = 5, c_cflag = 191, c_lflag = 35387, c_line = 0 '\000', c_cc = "\003\034\177\025\004\000\001\000\021\023\032\000\022\017\027\026", '\000' <repeats 15 times>, c_ispeed = 15, c_ospeed = 15} (gdb) p/t new->c_lflag $2 = 1000101000111011 (gdb) n 12 tcsetattr(STDIN_FILENO, TCSANOW, &new); /* 設定を反映させる */ (gdb) p/t new->c_lflag $3 = 1000101000110011