Linux下各種buffer的比較

2021-09-24 11:26:00 字數 1764 閱讀 1697

2019獨角獸企業重金招聘python工程師標準》

型別預設大小[1]

儲存位置

操作函式

備註標準i/o流[2]

file

bufsiz[3]

(8192) 或者st_blksize[4]

(4096)

user space

stat(2),setvbuf(),fflush()每乙個標準i/o流都有乙個buffer

stdinstdin->_io_buf_end[5]

- stdin->_io_buf_base(1024)

stdoutstdout->_io_buf_end - stdout->_io_buf_base(1024)

stderr1

tcpreceive buffer

so_rcvbuf[6]

(87380)

kernel space

getsockopt(),setsockopt()每乙個socket都有兩個buffer

send buffer

so_sndbuf(16384)

udp[7]

receive buffer

so_rcvbuf(114688)

send buffer

so_sndbuf(114688)

腳注:括號中的數字為我電腦上的實際大小, 單位為位元組. 測試環境: ubuntu 9.10, 核心版本2.6.31, gnu c library版本2.10.1, 檔案系統ext4.

標準i/o流buffer的預設大小是由具體的c函式庫實現決定的, 比如gnu c library就使用st_blksize作為預設大小. 每個流的buffer是在建立好流之後, 第一次呼叫標準i/o庫函式對流進行操作時通過malloc()函式分配的. (參見《apue》5.4節與5.12節)

bufsiz是定義在標頭檔案中的巨集.

st_blksize是「struct stat」中的成員, 通過stat(2)函式獲得.

_io_buf_end以及_io_buf_base是「struct _io_file」中的成員, 「struct _io_file」的定義通常在中. 其實在中可以看到「typedef struct _io_file file;」, 也就是我們經常使用的file指標指向的結構體了.

so_rcvbuf是socket的選項名, 可以通過getsockopt()函式獲得大小, 以及setsockopt()設定大小. 後同. (參見《unp》2.11節與7.5節)

udp型別的socket實際上是不存在buffer的, 這裡的大小只是用來約束資料報的最大長度. (參見《unp》2.11節)

linux的top下buffer與cache的區別

buffer 緩衝區,乙個用於儲存速度不同步的裝置或優先順序不同的裝置之間傳輸資料 的區域。通過緩衝區,可以使程序之間的相互等待變少,從而使從速度慢的裝置讀入資料 時,速度快的裝置的操作程序不發生間斷。cache 當你讀寫檔案的時候,linux核心為了提高讀寫效能與速度,會將檔案在記憶體中進行快取,...

linux 下各種目錄的意義

bin 二進位制binary的縮寫.它裡面存放的是系統二進位制檔案 boot 系統啟動所需要的一些檔案 dev device的縮寫.它是系統裝置目錄.比如dev hda 就是系統的第乙個ide硬碟 proc 它是記憶體的映像檔案。它裡面存放的是記憶體中的映像。你可以通過訪問它裡面的檔案而直接訪問記憶...

linux下各種小命令

小技巧 2 1把標準錯誤重定向到標準輸出。2 dev null把標準錯誤扔到黑洞去 本文主要收集linux下各種小命令 cut cut 命令從檔案或者管道的每一行剪下位元組 字元和字段並將這些位元組 字元和字段寫至標準輸出。例如 cat etc passwd cut c 1 5 wc l用來統計行數...