簡體   English   中英

在Linux和C中使用管道

[英]Using pipes in Linux with C

我正在操作系統課程中學習,我們應該學習如何使用管道在進程之間傳輸數據。

我們獲得了這段簡單的代碼,該代碼演示了如何使用管道,但是我很難理解它。

#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);
  }

寫功能做什么? 似乎將數據發送到管道並同時將其打印到屏幕上(至少好像第二次調用write函數時會這樣做)。

有沒有人對優秀的網站有任何建議,以學習諸如C,FIFO,信號,C語言中使用的其他其他基本Linux命令之類的主題?

該程序通過pipe(2)調用創建一個管道。 管道具有一個打開的文件描述符( pipefd[0] )和一個打開的pipefd[1]pipefd[1] )。 程序首先將“ hello world \\ n” 寫入管道的寫入端,然后從管道的讀取端讀取消息。 然后,通過對文件描述符1的write(2)調用將消息寫出到控制台(stdout)。


Beej的《 Unix進程間通信指南》提供了有關Unix / Linux IPC的一些很好的信息。 您經常可以找到他的另一本指南Beej的《網絡編程指南》

我發現Bruce Molay撰寫的《 理解UNIX / LINUX編程:理論與實踐指南》是一本關於Unix / Linux系統編程的優秀書籍。

write()的第一個參數是要write()文件描述符

在第一個調用中,代碼正在寫入管道的一端( pipefd[1] )。 在第二個調用中,它正在寫入文件描述符1,在符合POSIX的系統中,文件描述符1始終是標准輸出(控制台)。 就其價值而言,文件描述符2是標准錯誤。

該函數創建一個管道,並將其終結點文件描述符存儲在pipefd[0]pipefd[1] 您寫到一端的任何內容都可以從另一端讀取,反之亦然。 第一個write()調用將“ hello world”寫入pipefd[1] ,而read()調用從pipefd[0]讀取相同的數據。 然后,第二個write()調用將該數據寫入文件描述符1 ,默認情況下為STDOUT ,這就是您在屏幕上看到它的原因。

管道起初可能會造成混亂。 當您閱讀/編寫更多使用它們的代碼時,它們將變得更容易理解。 我推薦UNIX環境中的 W. Richard Stevens 高級編程作為理解它們的好書。 我記得,它有很好的代碼示例。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM