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