Linux系统使用一个单独的换行符( )来表示一行的结束,而其他的操作系统(MS-DOS)用回车符合换行符两个字符的组合来标识一行的结束。
输入输出的标准模式:所有的输入都基于行进行处理,在一个输入行完成前,终端接口负责所有的键盘输入。(用户程序收到的是整行的字符串,并不会感受到输错退格等操作)
非标准模式:程序对用户的输入有更大的控制权
重定向输出:例如将程序重定向到一个文件,此时终端不输出内容
1 ./menu1 > file //将menu的输出重定向到文件 2 3 ./menu1 >file 2>file.error //将输出重定向到file文件 将标准错误输出重定向到file.error文件中
检测终端是否被重定向
1 #include <unistd.h> 2 3 int isatty(int fd); //fd是文件描述符
检查当前程序是否输出到终端
1 if(!isatty(fileno(stdout))) { 2 fprintf(stderr, "You are not a terminal."); 3 }
在一段程序中可以选择输出到文件或输出到终端提示用户,方法是将设备/dev/tty作为文件打开,对文件进行读取与输出,将直接输出到terminal,而正常的输出将输出到重定向的文件
例如:
1 printf("hello"); 2 3 FILE *input,*output; 4 input = fopen("dev/tty",'r'); 5 output = fopen("dev/tty",'w'); 6 fprintf(output,"output to terminal."); //程序的标准输出被重定向到文件 但是可以通过这种办法输入或输出到terminal
调用本函数时,使用重定向到文件
./menu3 > file
终端驱动程序和通用终端接口(GTI)
Linux提供独立于用户程序的控制接口实现与内核终端驱动程序的直接交互,实现如行编辑、缓存控制、回显等更底层的,更灵活的功能
termios数据结构,被定义在termios.h文件中
终端控制按照模式被分为输入模式(终端输入)、输出模式、控制模式(控制终端的硬件特性)、本地模式(如标准输入行模式与非标准模式)、特殊控制字符(键盘组合按键,对于终端的特殊功能,如重启、中断等)五种。
通过shell访问终端模式
将终端误操作设置为非标准模式时的解决办法P157
例子:
关闭输入密码时的终端回显功能
1 stty -echo //此时键盘输入将不会显示到terminal
在密码输入完成后,需要打开回显
stty echo
使用termios结构的密码程序P159
Linux虚拟控制台&伪终端
一组终端设备能够共享PC的屏幕,键盘和鼠标等
who
ps -e 操作将返回当前登录进系统的用户信息,以及在这个虚拟控制台上运行的shell和执行的程序
伪终端与终端唯一的区别是没有对于的硬件设备,它们可以用来为其他程序提供终端形式的接口。