实例演练:
程序p6.2.c通过修改终端控制字符,将终端输入结束符由“Ctrl+D”,修改成了“Ctrl+G”。首先,程序调用tcgetattr函数获得标准输入的termios信息,将termios结构体中的c_cc[VEOF]控制字符的修改成0x07(即Ctrl+G);然后,使用tcsetattr函数将修改后的termios参数设置到终端中。具体代码如下所示:
//p6.2.c 修改终端控制字符示例 #include <stdio.h> #include <termios.h> #include <unistd.h> #include <errno.h> int main(void){ //term用于存储获得的终端参数信息 struct termios term; int err; //获得标准输入的终端参数,将获得的信息保存在term变量中 if(tcgetattr(STDIN_FILENO,&term)==-1){ perror("Cannot get standard input description"); return 1; } //修改获得的终端信息的结束控制字符 term.c_cc[VEOF]=(cc_t)0x07; //使用tcsetattr函数将修改后的终端参数设置到标准输入中 //err用于保存函数调用后的结果 err=tcsetattr(STDIN_FILENO,TCSAFLUSH,&term); //如果err为-1或是出现EINTR错误(函数执行被信号中断), //给出相关出错信息 if(err==-1 && err==EINTR){ perror("Failed to change EOF character"); return 1; } return 0; } |
使用gcc编译p6.2.c程序,得到名为p6.2的可执行程序。在执行p6.2程序前,按“Ctrl+D”可以使终端结束。执行p6.2程序后,按“Ctrl+D”失去了作用,而输入“Ctrl+G”实现了原来“Ctrl+D”的功能。