[英]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系統編程的優秀書籍。
該函數創建一個管道,並將其終結點文件描述符存儲在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.