當管道為空時: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;