我正在使用在内核 3.2.0 上运行的 Linux 系统。在这个系统上,我编写了一个程序,它最终会生成大约 50GB 的数据,然后将其发送到 stdout。这个输出我想重定向到一个文件。
会发生某种管道溢出吗?还是不管数据量如何,管道都能可靠地工作?
管道不能溢出。管道只是生产者和消费者之间的缓冲区(一定数量的内存,在当前系统上很可能是 64KB)。如果生产者的生产速度快于消费者的消费,生产者将被阻塞(这意味着程序将休眠),直到消费者通过读取缓冲区再次在缓冲区中腾出空间。
此外,您描述的案例在技术上不是管道。如果我们谈论 POSIX sh,重定向到文件 ( acommand > afile) 会使命令的 stdout 直接指向文件。管道包含|字符,巧合地也称为“管道”,并且是两个正在运行的程序之间的连接:acommand | anothercommand.
(但话又说回来,幕后真正发生的事情是另一回事:例如,/dev 下有许多伪设备文件实际上重定向到正在运行的进程。例如,echo Hello World > /dev/pts/1可能正在写入您当前的 xterm)
| 归档时间: |
|
| 查看次数: |
453 次 |
| 最近记录: |