天天看點

程序間通信--------管道

當管道為空時:read阻塞

當管道為滿時:write阻塞

有名管道(mkfifo    fifo):管道檔案在磁盤,寫入管道的資料在記憶體(無名管道不存在)

有名管道和無名管道間的主要差別:

有名管道可以用在任意兩個程序之間,無名管道(pipe)隻能用在父子程序之間。

先建立管道,再執行fork();

重定向:用管道的寫端覆寫标準輸出(dup2(fd[1],1)  "1"代表标準輸出)

讀端關閉,寫端寫入資料引發錯誤異常,write執行後産生sigpipe信号;

寫端關閉,讀端不再阻塞,read傳回值為0;

怎樣以非阻塞的方式在管道中讀取資料?

1.在open的時候傳入O_NONBLOCK;

2.按非阻塞的方式打開:fcntl(fd,F_SETFL,O_NONBLOCK);

3.在mode設定O_NONBLOCK;

繼續閱讀