UNIX-LINUXプログラミング実践チュートリアル->第5章->インスタンスコード注記->setecho.c
2541 ワード
一つの問題
エコービットの状態を設定し、コマンドラインパラメータがyの場合はオン、そうでない場合はオフにします.
にぶんせき
標準入力ファイル記述子は0である.tcgetattr()関数とtermios構造体を使用して、標準入力のプロパティを取得します.tcsetattr()関数とtermios構造体を使用して、変更したプロパティ設定を標準入力に書き換えることができます.
三実現
四相関関数及び構造体
1 tcgetattr()関数ttyドライバのプロパティヘッダファイル:#include #include 関数プロトタイプ:int tcgetattr(int fd,struct termios*info)パラメータ:fd端末に関連付けられたファイル記述子info端末構造へのポインタ戻り値:-1エラー0で正常に戻りました
2 tcsetattr()関数ttyドライバのプロパティヘッダファイル:#include #include 関数プロトタイプ:int tcsetattr(int fd,int when,struct termios*info);パラメータ:fdが端末に関連付けられたファイル記述子whenが設定を変更する時間(TCSANOW即時;TCSADRAINドライバ待ちキュー内の全ての出力が端末TCSAFLUSHドライバ待ちキュー内の全ての出力に転送され、全てのキュー内の入力データが解放される)infoターミナル構造へのポインタ戻り値:-1エラーに遭遇しました0正常に戻りました
3 termios構造体struct termios{tcflag_t c_iflag;/*input mode flags*/tcflag_t c_oflag;/*output mode flags*/tcflag_t c_cflag;/*control mode flags*/tcflag_t c_lflag;/*local mode flags*/cc_t c_c[NC CS]; /*control characters*/ speed_t c_ispeed; /*input speed*/ speed_t c_ospeed; /*output speed*/}
エコービットの状態を設定し、コマンドラインパラメータがyの場合はオン、そうでない場合はオフにします.
にぶんせき
標準入力ファイル記述子は0である.tcgetattr()関数とtermios構造体を使用して、標準入力のプロパティを取得します.tcsetattr()関数とtermios構造体を使用して、変更したプロパティ設定を標準入力に書き換えることができます.
三実現
#include <stdio.h>
#include <termios.h>
#define oops(s,x) {perror(s);exit(x)};
main(int ac,char *av[])
{
struct termios info;
/* */
if(ac == 1)
{
exit(0);
}
/* */
if(tcgetattr(0,&info) == -1)
{
oops("tcgettattr",1);
}
/* y, , */
if(av[1][0] == 'y')
{
info.c_lflag |= ECHO;
}
else
{
info.c_lflag &= ~ECHO;
}
/* */
if(tcsetattr(0,TCSANOW,&info) == 1)
{
oops("tcsetattr",2);
}
}
四相関関数及び構造体
1 tcgetattr()関数ttyドライバのプロパティヘッダファイル:#include
2 tcsetattr()関数ttyドライバのプロパティヘッダファイル:#include
3 termios構造体struct termios{tcflag_t c_iflag;/*input mode flags*/tcflag_t c_oflag;/*output mode flags*/tcflag_t c_cflag;/*control mode flags*/tcflag_t c_lflag;/*local mode flags*/cc_t c_c[NC CS]; /*control characters*/ speed_t c_ispeed; /*input speed*/ speed_t c_ospeed; /*output speed*/}