linux 管道的大小,緩衝,阻塞方法,以及容量

2021-07-28 04:01:15 字數 813 閱讀 8190

ulimit  -a可以檢視管道的大小,這是核心設定的為8*512byte=4k

linux 管道實現的機制

從本質上說,管道也是一種檔案,但他又和一般的檔案有所不同,管道可以克服使用檔案進行通訊的兩個問題

-  限制管道的大小。實際上,管道是乙個固定大小的緩衝區。在linux中該換沖區的大小為一頁,4k

使得他的大小不像檔案那樣不加檢驗的增長。使用固定緩衝區也會帶來問題,比如再寫管道時可能變滿

當這種情況發生時,隨後對管道的write()呼叫被阻塞,等待某些資料被讀取,以便騰出足夠的空間供

write()呼叫。

-  讀取工作也可能比寫的程序快。當所有程序的資料被讀取完時,乙個隨後的read()呼叫將預設的被阻塞、

管道變空。這種情況發生時,乙個隨後的read()呼叫將被預設的阻塞,等待某些資料被寫入,這樣就解決了read()

呼叫將被預設的阻塞,等待某些資料將被寫入,這解決了read()呼叫返回檔案結束的問題。

寫乙個程式測試下管道容量

可以看到容量為65536

Linux有名管道(FIFO)的阻塞和非阻塞讀寫

有名管道的讀寫有阻塞和非阻塞兩種,可以在open 時指定,下面我們對各種情況進行一些討論。寫程序 include include include include include include define fifo name tmp myfifo main 以阻塞型只寫方式開啟fifo fd op...

Linux下測試堆的大小,管道的大小

測試堆的大小 1 include 2 include 3 include 4 include 56 int main 7 16else 17 20 21return 0 22 結果為 3055,所以為3055個1m,說明乙個程序最多可申請的堆大小大約為2.98g 測試管道的大小 1 include ...

Linux管道的容量大小及管道的資料結構

一.管道容量 我們通過ulimit a命令檢視到的pipo size定義的是核心管道緩衝區的大小,這個值的大小是由核心設定的 而pipe capacity指的是管道的最大值,即容量,是核心記憶體中的乙個緩衝區。1.首先我們通過命令來看一下核心管道緩衝區的大小 2.我們可以通過乙個程式來測試管道的最大...