linux中关于标准输入中涉及EOF的处理方式

2019-07-13 05:20发布

linux中关于标准输入中涉及EOF的处理方式 标准输入设备是行缓冲的,当从键盘上输入字符串,输入的字符串会首先被送到输入缓冲区中存储,当铵下回车键后才会去检测输入缓冲区中是否有了数据(也就是说fgets,fgetchar等函数这个时候才去从缓冲区中读数据).我们可以把输入缓冲区理解为文件,那么对于这个文件来说,它也有结束的时候,输入函数在从缓冲区中读文件的时候也会去检测有没有流结束标志(EOF),这种标志是通过Ctrl+d产生的,在按下Ctrl+d之后立即响应.如果在此之前有输入字符,则Ctrl+d就相当于回车,即把输入的内容送到输入缓冲区供读取使用,此时Ctrl+d不作为流结束符使用,下次按下的Ctrl+d则作为流结束标志.如果按下Ctrl+d之前没有输入任何数据,刚Ctrl+d作为流结束标志,表示标准输入设备对应的文件结束.
那么,如果真的想输入Ctrl-D怎么办?这时必须先按下Ctrl-V,然后就可以输入Ctrl-D,系统就不会认为这是EOF信号.Ctrl-V表示按"字面含义"解读下一个输入,要是想按"字面含义"输入Ctrl-V,连续输入两次就行了.
注:Linux中按下Ctrl-Z,表示将该进程中断,在后台挂起,用fg命令可以重新切回到前台;按下Ctrl-C表示终止该进程.