我想在Linux操作系统上的C程序内执行以下操作:
这样做的目的是为了性能目的而避免访问任何驱动器。
我知道使用PIPE系统调用创建管道非常简单,我可以使用popen为输入或输出目的创建管道。
但是您将如何针对输入和输出执行此操作?
您需要对管道非常小心:
注意关闭的数量,尤其是在孩子中。如果使用dup2(),则不必显式关闭标准输入和输出。但是,如果您执行显式关闭,则dup()可以正常工作。还要注意,dup()和dup2()都不会关闭重复的文件描述符。如果忽略关闭管道,则两个程序都无法正确检测到EOF;当前进程仍可以写入管道的事实意味着管道上没有EOF,并且程序将无限期挂起。
请注意,此解决方案不会更改孩子的标准错误;它与父级的标准错误位于同一位置。通常,这是正确的。如果您有一个特殊的要求,即以不同的方式处理来自子级的错误消息,那么也应对子级的标准错误采取适当的措施。