国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Linux管道容量

2019-11-06 08:16:38
字體:
來源:轉載
供稿:網友


管道容量(轉自:http://blog.chinaunix.net/uid-27471192-id-3305880.html)

根據手冊,linux上的PipE容量為(capacity)65536個字節;實驗得到Ubuntu的PIPE_BUF為4096。這里要特別說明的是我看到網上有人將這個Capacity和PIPE_BUF混淆了,當管道的寫端存在時,如果請求的字節數目大于PIPE_BUF,則返回管道中現有的數據字節數,如果請求的字節數目不大于PIPE_BUF,則返回管道中現 有數據字節數(此時,管道中數據量小于請求的數據量);或者返回請求的字節數(此時,管道中數據量不小于請求的數據量)(PIPE_BUF在include/linux/limits.h中定義,不同的內核版本可能會有所不同。Posix.1要求PIPE_BUF至少為512字節,red hat 7.2中為4096)

要保證write操作是原子操作,一次寫入的字節數n就不能超過PIPE_BUF;非阻塞模式下當然還需要有>=n的空余空間,否則寫入失敗。一次寫入大于PIPE_BUF的數據,不管是不是阻塞模式都不保證是原子操作

非阻塞模式下,能一次性寫入的最大數據量就是管道的容量即65536字節了,注意這里的一次性寫入是指write不返回的情況下,和原子操作不是一回事。如果寫入的更長,也只能寫這么多,write函數會返回已寫入的長度

如果寫端不存在,讀的時候會返回0,代表讀到了文件尾。如果讀端不存在,寫的時候就會產生SIGPIPE信號(忽略此信息的情況下write會返回失敗,errno為EPIPE)

 

在linux終端輸入*man 7 pipe*命令,可以查找到管道容量的最大和最小字節數

管道的實現機制:(轉自:http://www.th7.cn/system/lin/201702/203314.shtml)

管道是由內核管理的一個緩沖區,它的一端連接一個進程的輸出,另一端連接一個進程的輸入。管道的緩沖區不需要很大,它被設計為環形的數據結構,當兩個進程都終止后,管道的生命周期也會被結束

從本質上說,管道也是一種文件,但它又和一般的文件有所不同,管道可以克服使用文件進行通信的兩個問題,具體表現為: 

管道是一個固定大小的緩沖區,在Linux中,該緩沖區的大小為一頁,即4kb,使它的大小不會像普通文件那樣不加檢驗的增長。在Linux中,內核使用struct pipe_inode_info結構體來描述一個管道,這個結構體定義在pipe_fs_i.h中。

struct pipe_inode_info結構體

 

緩沖區的個數:

#define PIPE_BUFFERS (16)

   管理緩沖區的結構

 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 乌拉特后旗| 甘德县| 阿尔山市| 高台县| 蕉岭县| 句容市| 龙游县| 宜阳县| 柳江县| 会理县| 科技| 交城县| 海伦市| 吴桥县| 体育| 贺兰县| 英吉沙县| 思茅市| 九寨沟县| 平邑县| 皮山县| 东方市| 尚志市| 微山县| 会东县| 卓尼县| 繁峙县| 合江县| 咸宁市| 岳普湖县| 公主岭市| 瑞安市| 乐至县| 通化市| 靖远县| 东源县| 白沙| 北宁市| 黄梅县| 遂宁市| 安吉县|