在Linux中使用C管道

Mei*_*eir 0 c linux pipe

我正在做一个操作系统课程,我们应该学习如何使用管道在进程之间传输数据.

我们得到了这段简单的代码,演示了如何使用管道,但我很难理解它.

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

main()
{
      int  pipefd [2], n;
      char buff[100] ;


      if( pipe( pipefd) < 0)
      {
        printf("can not create pipe \n");
      }
      printf("read fd = %d, write fd = %d \n", pipefd[0], pipefd[1]);
      if ( write (pipefd[1],"hello world\n", 12)!= 12)
      {
        printf("pipe write error \n");
      }
      if(  ( n = read ( pipefd[0] , buff, sizeof ( buff)  ) ) <= 0 )
      {
        printf("pipe read error \n");
      }
      write ( 1, buff, n ) ;
exit (0);
  }
Run Code Online (Sandbox Code Playgroud)

写功能有什么作用?它似乎将数据发送到管道并将其打印到屏幕上(至少看起来这是第二次调用write函数时它会这样做).

有没有人有任何关于良好网站的建议,以了解这个,FIFO,信号,C中使用的其他基本linux命令等主题?

jsc*_*ier 5

该程序通过pipe(2)调用创建一个管道.管道有一个文件描述符打开read(pipefd[0])和一个打开写入(pipefd[1]).程序首先将"hello world \n" 写入管道的写入端,然后从管道的读取端读取消息.然后通过对文件描述符1 的write(2)调用将消息写出到控制台(stdout).


Beej的Unix进程间通信指南提供了有关Unix/Linux IPC的一些很好的信息.您经常会找到他的其他指南, Beej的网络编程指南.

我发现理解UNIX/LINUX编程: Bruce Molay的理论与实践指南是一本关于Unix/Linux系统编程的优秀书籍.