c - 通过管道发送 C 命令行参数

标签 c pipe

我正在尝试使用管道将我的命令行参数从子进程发送到父进程,但无法弄清楚我做错了什么。我的代码如下。任何帮助表示赞赏。提前致谢。

int main(int argc, char argv[])
   pid_t child;
   int fd[2];

   pipe(fd);
   if((child = fork() == 0)
   {
      int len = strlen(argv[1]);
      close(fd[0];
      write(fd[1], argv[1], len);
      exit(0);
   }
   else //Assuming process won't fail for now
   {
      char src[10]; //Just using 10 for now, no arguments have more than 10 characters
      read(fd[0], src, (strlen(src)));
      fprintf(stderr, "%s\n", src);
      close(fd[0]);
   }
}

最佳答案

你有一些小错误,但据我所知,不管你信不信,这可能是你真正的问题。

read(fd[0], src, (strlen(src)));

我的猜测是第一个字符为空,您成功读取了 0 个字节。

改为

  read(fd[0], src, (sizeof(src)));

在你的大项目中,确保你在循环中读写。您不能保证读取或写入您指定的内容。

关于c - 通过管道发送 C 命令行参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19124434/

相关文章:

C: 函数返回地址(mac)

python - 使用 Python 从正在运行的脚本中读取标准输出

单个管道可以用于父级和子级之间的双向通信吗?

python - Python 中的 All-to-All 线程通信

python - 如果 Python 中没有数据传输,如何从标准输入或文件中读取?

c - 动态内存和 fgets

c - Wget 中的 --bind-address 将覆盖路由数据包的接口(interface)的 IP 地址

c - C 中的指针问题

c - 程序(数组到结构)警告 : assignment makes integer from pointer without a cast

c++ - 我在哪里可以找到内置的 gcc memcpy?