管道實現(xiàn)進程間通信 linux管道原理?
linux管道原理?在Linux中,管道是一種經(jīng)常使用的通信機制。在本質(zhì)上,管道也是一種文件,但它不同于一般文件。流水線可以克服使用文件進行通信的兩個問題:限制流水線的大小。實際上,管道是一個固定大小
linux管道原理?
在Linux中,管道是一種經(jīng)常使用的通信機制。
在本質(zhì)上,管道也是一種文件,但它不同于一般文件。流水線可以克服使用文件進行通信的兩個問題:限制流水線的大小。實際上,管道是一個固定大小的緩沖區(qū)。在Linux中,緩沖區(qū)的大小是一頁,也就是4K字節(jié),這樣它的大小就不會像文件那樣增長。使用單個固定緩沖區(qū)也會帶來問題。例如,當(dāng)寫入管道時,它可能已滿。當(dāng)這種情況發(fā)生時,對管道的后續(xù)write()調(diào)用將在默認情況下被阻止,等待讀取一些數(shù)據(jù),以便為write()調(diào)用留出足夠的寫入空間。讀取過程也可能比寫入過程快。讀取所有當(dāng)前進程數(shù)據(jù)后,管道將變空。當(dāng)發(fā)生這種情況時,默認情況下會阻止后續(xù)的read()調(diào)用,等待寫入一些數(shù)據(jù),這解決了read()調(diào)用返回文件結(jié)尾的問題。注意:從管道讀取數(shù)據(jù)是一次性操作。一旦數(shù)據(jù)被讀取,它將從管道中被丟棄,以釋放空間來寫入更多的數(shù)據(jù)。