管道与tmfiles。什么更好,为什么?

时间:2011-02-28 12:28:45

标签: c++ c parent-child

我想要编写程序来创建子进程并将其stdout和stderr流重定向到父进程。那么为了获得良好的性能tmpfile()或pipe(),以及为什么这样做有什么好的选择?

3 个答案:

答案 0 :(得分:6)

尽可能使用pipe,除非您希望在未经读取的情况下在流中构建大量输入。管道将数据保存在RAM中,临时文件需要文件系统操作。文件上的fdsync将比管道上的{{1}}贵得多。管道也不太容易受到竞争条件造成的安全问题的影响。

如果您的应用程序无法使用管道语义(需要输出文件系统路径或类似问题),请尝试使用“命名管道”(也称为FIFO)。

答案 1 :(得分:0)

如果没有一个主要缺点,管道将是完美的:固定缓冲区大小。当使用管道时,缓慢的消费者会限制生产者,这反过来会导致过多的上下文切换......

答案 2 :(得分:0)

管道的主要缺点是它不可寻找,也就是说,消费者无法前进或后退。如果数据交换不需要此属性,那么管道是更好的选择。

相关问题