程序通訊 管道 read write

2021-07-01 18:28:11 字數 1020 閱讀 1818

管道相關的關鍵概念

管道是linux支援的最初unix ipc形式之一,具有以下特點:

管道的建立:

#include int pipe(int fd[2])
該函式建立的管道的兩端處於乙個程序中間,在實際應用中沒有太大意義,因此,乙個程序在由pipe()建立管道後,一般再fork乙個子程序,然後 通過管道實現父子程序間的通訊(因此也不難推出,只要兩個程序中存在親緣關係,這裡的親緣關係指的是具有共同的祖先,都可以採用管道方式來進行通訊)。

管道的讀寫規則:

管道兩端可分別用描述字fd[0]以及fd[1]來描述,需要注意的是,管道的兩端是固定了任務的。即一端只能用於讀,由描述字fd[0]表示,稱 其為管道讀端;另一端則只能用於寫,由描述字fd[1]來表示,稱其為管道寫端。如果試圖從管道寫端讀取資料,或者向管道讀端寫入資料都將導致錯誤發生。 一般檔案的i/o函式都可以用於管道,如close、read、write等等。

從管道中讀取資料:

向管道中寫入資料:

驗證當管道中父程序沒有寫入資料時,而子程序使用read讀管道中的資料時,read將一直阻塞,等待管道中寫入資料

#include #include #include #include #include #include #include int main(void)

cpid = fork();

if(cpid < 0)

if(cpid > 0)

close(fd[1]);

memset(readbuf,0,sizeof(readbuf));

int rnu=read(fd[0],readbuf,100);//read是阻塞操作,沒有資料等待,

//所以在子父程序中不擔心競爭問題

printf("read number:%d\n",rnu);

printf("child process receive:\n%s\n",readbuf);

close(fd[0]);

_exit(0);

}

程序通訊 管道通訊

程序間通訊 目的 資料傳輸 乙個程序需要將它的資料傳送給另乙個程序 資源共享 多個程序之間共享同樣的資源 通知事件 乙個程序需要向另乙個或一組程序傳送訊息,通知它們發生了某種事件 程序控制 有些程序希望完全控制另乙個程序的執行 如debug程序 此時控制程序希望能夠攔截另乙個程序的所有操作,並能夠及...

程序通訊 管道通訊

自己的理解,首先要區分概念 管道和管道通訊 所謂 管道 是指用於連線乙個讀程序和乙個寫程序以實現它們之間通訊的乙個共享檔案,又名pipe檔案 是一種特殊的檔案,這就意味著你可以向操作檔案一樣操作無名管道,無名管道在核心中對應的是一段特殊的記憶體空間,這段記憶體空間由作業系統進行管理,對使用者是不可見...

linux 程序通訊 管道通訊

程序通訊 1 pipe 函式的作用 建立無名管道 函式的原型 int pipe int fds 2 函式的引數 新建的兩個描述符fds陣列返回 fds 0 表示管道的讀取端 fds 1 表示管道的寫入端 返回值 成功 0 出錯 1 標頭檔案 include 2 mkfifo 函式的作用 建立有名管道...