我想要编写程序来创建子进程并将其stdout和stderr流重定向到父进程。那么为了获得良好的性能tmpfile()或pipe(),以及为什么这样做有什么好的选择?
答案 0 :(得分:6)
尽可能使用pipe
,除非您希望在未经读取的情况下在流中构建大量输入。管道将数据保存在RAM中,临时文件需要文件系统操作。文件上的fdsync
将比管道上的{{1}}贵得多。管道也不太容易受到竞争条件造成的安全问题的影响。
如果您的应用程序无法使用管道语义(需要输出文件系统路径或类似问题),请尝试使用“命名管道”(也称为FIFO)。
答案 1 :(得分:0)
如果没有一个主要缺点,管道将是完美的:固定缓冲区大小。当使用管道时,缓慢的消费者会限制生产者,这反过来会导致过多的上下文切换......
答案 2 :(得分:0)
管道的主要缺点是它不可寻找,也就是说,消费者无法前进或后退。如果数据交换不需要此属性,那么管道是更好的选择。