linux的管道和命名管道

2021-05-27 00:34:59 字數 1587 閱讀 9355

看了個教程,感覺還是要結合**看。

管道是linux裡面程序間通訊的一種方式,其他的還有像訊號(signal)、訊號量、訊息佇列、共享記憶體、套接字(socket)等。

1.管道pipe

int pipe( int fd[2] );

返回值:成功,返回0,否則返回-1。引數陣列包含pipe使用的兩個檔案的描述符。fd[0]:讀管道,fd[1]:寫管道。

必須在fork()中呼叫pipe(),否則子程序不會繼承檔案描述符。兩個程序不共享祖先程序,就不能使用pipe。但是可以使用命名管道。

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

if((pid=fork())==0)

close(pipe_fd[0];

exit(0);

} else if(pid>0)

}

2.流管道

#include #include #include #include #define bufsize 1000

int main()

3.命名管道fifo

特點:1.fifo是作為乙個特殊的裝置檔案存在;

2.不同祖先程序的程序之間可以共享資料;

3.使用完後fifo將繼續儲存。

#include #include #include #include #include #include #include #define fifo "/tmp/myfifo"                                         //管道位置

main(int argc,char** argv)

while(1)

printf("read %s from fifo\n",buf_r);

sleep(1);

} pause();

unlink(fifo);

}

通常對命名管道的讀在寫之前。

#include #include #include #include #include #include #include #define fifo_server "/tmp/myfifo"

main(int argc,char** argv) //argc:引數個數? argv:引數

else

printf("write %s to the fifo\n",w_buf);

}

fifo建立後,可以用open(),close(),read(),write(),unlink()等流操作函式操作。

linux中匿名管道和命名管道

1 建立管道和父子程序,子程序關閉讀端,父程序關閉寫端,子程序寫,父程序讀。2 如果所有指向管道寫端的檔案描述符都關閉了 管道寫端的引用計數等於0 而仍然有程序 從管道的讀端讀資料,那麼管道中剩餘的資料都被讀取後,再次read會返回0,就像讀到檔案末尾一樣。3 如果有指向管道寫端的檔案描述符沒關閉 ...

普通管道和命名管道

2116 0 管道分為普通管道和命名管道 兩者都是半雙工的。普通管道只能用於父子程序或兄弟程序間的通訊,因為普通管道通過fork呼叫來拷貝檔案描述符的,在檔案系統中,普通管道並不對應物理檔案。命名管道在檔案系統中有物理檔案存在,因此可以用於非親屬的程序間通訊。include int pipe int...

命名管道和匿名管道

我們知道程序間是可以通訊的。可以達到資料傳輸 資源共享 事件通知 程序控制等目的。程序間通訊主要包括管道 系統ipc,套接字等。管道分為三種 1 普通管道 int pipe int fds 2 返回值0表示成功,1表示失敗 fd 0 讀 fd 1 寫 子程序往管道中寫資料,寫資料時要關閉讀端 父程序...