管道的兩種侷限性:
(1)歷史上他們是半雙工的(也就是說資料只能在乙個方向上流動),現在某些系統提供全雙工的,但是為了最佳可移植性,我們還是按照半雙工來。
(2)它們只能在具有公共祖先的程序之間使用::乙個管道由乙個程序建立,然後該程序呼叫fork,此後父子就成就可以應用該管道。
#include
int pipe(int filedes[2]);//返回兩個檔案描述符,filedes[0]表示讀,filedes[1]表示寫,1的輸出是0的輸入。
通常乙個管道只有乙個讀程序乙個寫程序。
寫乙個讀端已經被關閉的管道會產生乙個sigpipe訊號,常量pipe_buf規定了核心中管道緩衝區的大小。
管道可以用過read(file[0],buff,len)和write(file[1],buff,len)來讀寫資料
#include
#include
int main()
else//可以在父程序前面加乙個sleep(1)來確保是子程序先執行
;close(file[1]);
read(file[0],buff,127);
printf("buff=%s\n",buff);
close(file[0]);
wait(null);//接收子程序結束的訊息防止發生僵死程序
}return 0;
}
linux管道(無名管道)
首先管道是程序之間的乙個單向資料流,它的資料流向由核心管理,只能從乙個程序流向另外乙個程序,乙個程序向管道寫入資料,另外乙個程序從這個管道讀取資料。在使用管道 無名管道 時,只能用在父子程序或者親屬程序之間,若要用在任意程序之間則需要使用fifo 有名管道 如圖程序ab通過管道進行資料交換。程序a通...
Linux管道(無名管道)
是一套免費使用和自由傳播的類unix作業系統,是乙個基於posix和unix的多使用者 多工 支援多執行緒和多cpu的作業系統。它能執行主要的unix工具軟體 應用程式和網路協議。它支援32位和64位硬體。linux繼承了unix以網路為核心的設計思想,是乙個效能穩定的多使用者網路作業系統。它主要用...
無名管道性質
pipe函式。pipe buf ubunt下為65536.寫性質。讀端關閉時,寫入資料會受到核心傳來的sigpipe訊號。讀端未關閉,當管道內已經填滿了pipe buf而未有讀出時,則會阻塞在write函式中,直到管道另一邊有讀出則繼續寫入管道直到寫完。讀性質。寫端關閉時,read函式返回0.寫端存...