做了一个控制Linux终端状态的实验,程序运行过程中,终端需要调整到 nobuffer、noecho。即,无缓冲,无回显状态。并且一次仅能接受一个字符的输入。
实现如下:
- int set_cr_noecho_mode()
- {
- struct termios ttystate;
- tcgetattr(0, &ttystate); // read current setting
- ttystate.c_lflag &= ~ICANON; //no buffering
- ttystate.c_lflag &= ~ECHO; //no echo
- ttystate.c_cc[VMIN] = 1; // get 1 char at a time
- tcsetattr(0, TCSANOW, &ttystate); // install setting
- }
- </pre><pre name=“code” class=“html”>int tty_mode(int how)
- {
- static struct termios original_mode;
- static int original_flags;
- if(how == 0)
- {
- //save
- tcgetaddr(0, &original_mode);
- original_flags = fcntl(0, F_GETFL);
- }
- else
- {
- //restore
- tcsetattr(0, TCSANOW, &original_mode);
- fcntl(0, F_SETFL, original_flags);
- }
- }