フラグ(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をセットするフラグをターミナルに 設定する処理は次のようになる。