是否`echo -n | ...` 向管道发送 EOF?

是否`echo -n | ...` 向管道发送 EOF?

是否echo -n | ...向管道发送 EOF? IE,

echo -n | sth

sth在其标准输入上收到 EOF 吗?

答案1

文件或流中没有表示为数据的 EOF。它只是与文件描述符相关的状态。

当回显终止时(几乎立即终止),管道的写入端被关闭。

下次读取时sth(假设它已读取先前写入文件的所有数据),管道状态更改为 EOF,并且发出的读取sth返回 EOF 条件。该进程可以继续进行所需的任何处理,只是无法从管道中读取更多内容。

答案2

是的。当写入管道的程序关闭写入端时,从管道读取的程序会看到管道上的文件结尾。更准确地说,当管道上打开的最后一个文件描述符关闭时,文件结束事件就会发生。关闭文件描述符的方法包括显式关闭和进程退出。

这里只有一个进程写入管道并运行echo -n,这取决于 shell 要么写入-n并换行,要么什么也不写入。当该进程完成写入并退出时,管道的写入端将关闭,因此sth会在管道上看到 EOF。 (也有可能 shell 在不分叉的情况下运行管道的左侧,在这种情况下,shell 在完成写入后显式关闭管道:此优化对管道的右侧没有任何影响.)

相关内容