フラグ(c_lflag)のECHOをリセットし、ECHONLをセットしたら
このフラグをターミナルに設定しなければならない。ターミナルを制御する
コマンドはヘッダーファイルの/usr/include/asm/ioctls.hのなかに
ある。
#define TCGETS     0x5401
#define TCSETS     0x5402
#define TCSETSW    0x5403
#define TCSETSF    0x5404
#define TCGETA     0x5405 <-- これ
#define TCSETA     0x5406
#define TCSETAW    0x5407
#define TCSETAF    0x5408 <-- これ
#define TCSBRK     0x5409
#define TCXONC     0x540A
#define TCFLSH     0x540B
          .
          .
          .
 | 
ターミナルにフラグを設定するコマンドはTCSETAFである。 ECHOをリセットし、ECHONLをセットするフラグをターミナルに 設定して、そのままプログラムを終了すると、ターミナルの状態(属性) は変ったままになってしまう。
それを避けるには、ターミナルの最初の状態(属性)を読み取って、それを保存しておき、
プログラムの終了前にそれを再設定して最初の状態(属性)に戻せばよい。
ターミナルの属性を読み取るコマンドはTCGETAである。
ターミナルの最初の状態を読み取って、保存する処理は次のようになる。
ただし、termio構造体型の変数をtty、保存用の変数を
tty_saveとした。なお、ターミナルのファイルデスクリプタ
は、標準入力のばあい、0に決められている。
 
プログラムの終了前に最初の状態に戻す処理は次のようになる。
 
また、ECHOをリセットし、ECHONLをセットするフラグをターミナルに 設定する処理は次のようになる。