c - 父子进程两个描述符之间管道创建查询

标签 c linux unix

在我的下面的工作程序中,我想了解,

如何/谁在 {child'spair[1]} 描述符和 {parent'spair[0]} 描述符之间建立(创建)单管道通信?

因为在我下面的程序中,我只是 fork() 了一个进程,并且立即谁在 {child'spair[1]} 描述符和 {parent'spair[0]} 描述符之间建立了管道连接?您认为接受这一点是显而易见的吗?

   #include <stdio.h>
   #include <stdlib.h>
   #include <errno.h>
   #include <sys/types.h>
   #include <unistd.h>
   int main(void)
   {
   int pair[2];
   char buf[30] ="";
   pipe(pair);
   if (!fork()) {
          printf(" CHILD: writing to the pipe\n");
          write(pair[1], "test", 5);
          printf(" CHILD: exiting\n");
          exit(0);
   } else {
          printf("PARENT: reading from pipe\n");
          read(pair[0], buf, 5);
          wait(NULL);
          printf(" PARENT: exiting\n");
   }
   return 0;
   }

请帮助我!!

最佳答案

你的问题不是特别清楚;第二个“问题”说的是一些看起来很明显的事情,但似乎本身不包含任何问题。例如,您实际上并没有说明您提供的示例中出了什么问题(如果有的话)。

我认为您应该了解的内容可能如下:

  1. pipe() 创建两个在操作系统中链接的文件描述符:读取器和写入器。

  2. 当您fork()时,所有打开的 FD 在父级和子级中都可用。因此,如果您在 fork() 之前调用了 pipe(),则读取器和写入器都可供子级使用。

  3. 通常 parent 是读者, child 是作者,或者 parent 是作者, child 是读者(即两者都不会写和读),它父进程关闭一个 fd,子进程关闭另一个 fd 是正常的。

关于c - 父子进程两个描述符之间管道创建查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21984616/

相关文章:

linux - move 名称中包含空格的多个文件 (Linux)

ios - 查找 ipa 文件是 32 位还是 64 位。 (macos/unix)

c - malloc函数(动态内存分配)导致全局使用时出错

c - 调试 Linux 内核时 dev_*() 系列函数有何用处?

创建写入文件的线程

linux - 在 sed 命令中扩展 unix 变量

c - 如何使用 Unix 系统调用打印文本文件的前 10 行?

c - 了解 MIPS 汇编代码段

linux - SYSENTER/SYSEXIT 与 INT 0x80

php - 来自 Linux 环境下运行的 PHP 的 Windows 网络驱动器