不可能正确地表述问题,例如:
让它head像这样工作:从标准输入打印前 5 行,之后该过程立即结束。
cat some_file.txt | head -5
读取文件的内容some_file.txt。让它有超过5行。head打印前 5 行并退出。
在打印 5 行并完成后,文件本身是否会被some_file.txt读取到最后?head
不可能正确地表述问题,例如:
让它head像这样工作:从标准输入打印前 5 行,之后该过程立即结束。
cat some_file.txt | head -5
读取文件的内容some_file.txt。让它有超过5行。head打印前 5 行并退出。
在打印 5 行并完成后,文件本身是否会被some_file.txt读取到最后?head
当 shell 执行如下命令时:
它启动两个进程并将 program1 和 program2 加载到它们中,之前创建了一个临时套接字,它作为stdout传递给第一个进程,并作为stdin传递给第二个进程:
如果 process2 突然关闭其stdin(在您的示例中,从其中读取五行之后),则 process1 (在尝试写入其stdout时)会收到一个 signal
SIGPIPE。在这种情况下,进程 1 究竟会做什么完全取决于程序 1 的开发人员对它的投资。通常, process1 也会安全终止。
如果像在您的示例中那样,此时 process1 正在从文件中读取信息,那么很可能在收到信号时,它已经从该文件中读取了下一个“部分”信息。这个“部分”的大小不仅取决于程序本身的实现1,还取决于操作系统——它如何配置可读文件所在设备的缓冲。
我在一个或多或少的大文件上做了这个:
或像这样:
在第二种情况下,时间要少得多
如果在程序中不使用冗余,文件将不会被读取到最后
cat,例如他们都可以在没有中介的情况下读取文件
cat。有些(查看文档)可能一次读取多个文件。冗余形式
直接呼叫