我对C语言中的IPC编程非常陌生。我有一个非常基本的问题,为什么我们的许多C代码使用dup2将stdout作为写头,stdin作为PIPE的读头。是否有任何好处,comapred为整数类型数组并使用数组作为管道调用的输入?
答案 0 :(得分:2)
许多C程序被写为过滤器,(默认情况下)从标准输入读取并写入标准输出。带有管道的管道利用并支持将输出从一个程序发送到另一个程序的输入的惯用语,如:
ls | wc -l
这就是为什么你经常最终得到将管道文件描述符连接到标准输入或标准输出的代码。如果您需要从任意文件描述符中读取或写入程序,则必须提供控制参数以告知它们要执行的操作。当然,这些日子在Linux系统上使用/dev/fd
文件系统,这是可行的,但这是最近一项创新,当许多程序首次编写时,这种创新是不可用的。使用以下方法可以得到与上面几乎相同的结果:
ls | wc -l /dev/fd/0
但在这种情况下wc
会回显文件名,而在第一个示例中没有给出名称时它不会回显文件名。