c - 写入文件描述符

标签 c process file-descriptor child-process dup2

在下面的代码片段中,我重定向了 ls 的输出命令输入 wc -l效果很好。现在我还想重定向 ls 的输出使用以下代码向名为“beejoutput.txt”的文件发出命令,但它不起作用。需要帮助。

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main(void)
{
  int pfds[2];
  pipe(pfds);
  if (!fork())
  {
    dup2(pfds[1],1);
    close(pfds[0]); 
    execlp("ls", "ls",NULL);
  }
  else
  {
    FILE *outputO=fopen ("beejoutput.txt", "w"); //opening file for writing

    dup2(pfds[0],0);
    dup2(fileno(outputO),pfds[0]); 
    close(pfds[1]); 
    execlp("wc", "wc","-l", NULL);
  }

  return 0;
}

最佳答案

dup 函数复制一个文件描述符,即新旧文件描述符之后都指向同一个打开的文件。这不同于让单个文件描述符同时引用两个不同的文件。

如果你想将相同的数据发送到两个不同的目的地,你需要在不同的进程中生成这两个命令,然后自己进行复制,或者生成一个“tee”命令的副本——无论哪种方式,你最终都会具有三个过程。

关于c - 写入文件描述符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5962708/

相关文章:

无法打开/开发/控制台

python - 如何使用 std[in/out/err] 以外的文件描述符?

c++ - 如何将管道作为文件传递给 C 应用程序?

linux - 反向正常运行时间监视器

windows - 如何根据子线程的线程 ID 查找进程的 pid?

c# - 在 C# 应用程序中运行 PowerShell 进程并与之交互

c - 在 C 中将标准输入与 select() 结合使用

c - 使用 AVX2 对 2 个短整数 vector 进行 vector 加法

c - 在普通文件中搜索字符串

c - 为什么这个程序会出现段错误?