是否echo -n | ...
向管道发送 EOF? IE,
echo -n | sth
会sth
在其标准输入上收到 EOF 吗?
答案1
文件或流中没有表示为数据的 EOF。它只是与文件描述符相关的状态。
当回显终止时(几乎立即终止),管道的写入端被关闭。
下次读取时sth
(假设它已读取先前写入文件的所有数据),管道状态更改为 EOF,并且发出的读取sth
返回 EOF 条件。该进程可以继续进行所需的任何处理,只是无法从管道中读取更多内容。
答案2
是的。当写入管道的程序关闭写入端时,从管道读取的程序会看到管道上的文件结尾。更准确地说,当管道上打开的最后一个文件描述符关闭时,文件结束事件就会发生。关闭文件描述符的方法包括显式关闭和进程退出。
这里只有一个进程写入管道并运行echo -n
,这取决于 shell 要么写入-n
并换行,要么什么也不写入。当该进程完成写入并退出时,管道的写入端将关闭,因此sth
会在管道上看到 EOF。 (也有可能 shell 在不分叉的情况下运行管道的左侧,在这种情况下,shell 在完成写入后显式关闭管道:此优化对管道的右侧没有任何影响.)