帶緩衝的IO和不帶緩衝的IO

2021-10-07 05:50:39 字數 907 閱讀 7105

檔案描述符:

檔案描述符是乙個小的非負整數,是核心用來標識特定程序正在訪問的檔案

標準輸入/輸出/出錯:

shell為每個程式開啟了三個檔案描述符,stdin_fileon,stdout_fileon,stderr_fileon,預設這三個檔案描述符都鏈向終端

不帶緩衝的io:

函式open read write lseek close提供了不用緩衝的io。這些函式都使用檔案描述符

ssize_t read(int fd,void *buf,size_t count)

從fd標識的檔案中一次讀取count位元組的字元到buf,返回一次讀取的位元組數,小於等於count

ssize_t write(int fd,const void *buf,size_t count)

從buf中一次寫count位元組到fd標識的檔案中,返回一次寫入的位元組數,小於等於count

所謂不帶緩衝是指使用者層沒有快取,通過系統呼叫直接對磁碟檔案進行讀寫,但是對於核心來說,還是進行了快取,核心現將資料寫到核心緩衝儲存器中,當緩衝儲存器溢位時再進行實際的io操作

標準io(帶緩衝的io)

標準io通過庫函式提供了無緩衝io的帶緩衝io介面

在使用者層建立乙個流快取區,庫函式向流快取區讀寫資料,流快取區溢位時進行系統呼叫,即再呼叫無緩衝的io

fwrite fread puts gets是標準io

標準i/o庫的乙個不足之處是它的效率不高, 這與它要複製的資料有關. 當使用每次一行函式fgets和fputs時, 通常要複製兩次資料. 一次是在核心和標準i/o緩衝區之間(當呼叫read和write時), 第二次是在標準i/o緩衝區和使用者程式中的行緩衝區之間.

無緩衝的io運算元據流向路徑:資料——核心快取區——磁碟

標準io操作的資料流向:資料——流快取區——核心快取區——磁碟

帶緩衝的IO和不帶緩衝的IO

首先說說帶緩衝的i o是什麼意思,在unix環境高階程式設計裡面,是這樣解釋的 術語不帶緩衝指的是每個read和write都呼叫核心中的乙個系統呼叫。所有的磁碟i o都要經過核心的塊緩衝 也稱核心的緩衝區快取記憶體 唯一例外的是對原始磁碟裝置的i o。既然read或write的資料都要被核心緩衝,那...

帶緩衝I O 和 不帶緩衝I O詳解

帶快取的檔案操作 是標準c 庫的實現,第一次呼叫帶快取的檔案操作函式時標準庫會自動分配記憶體並且讀出一段固定大小的內容儲存在快取中。所以以後每次的讀寫操作並不是針對硬碟上的檔案直接進行的,而是針對記憶體中的快取的。何時從硬碟中讀取檔案或者向硬碟中寫入檔案有標準庫的機制控制。不帶快取的檔案操作通常都是...

帶緩衝的IO流和不帶緩衝的IO流

先來看看不帶快取的i o和標準 帶快取的 i o都有那些 不帶快取的i o read,write,open.標準 帶快取的 i o fgets,fread,fwrite.這裡使用兩個對應的函式進行比較 ssize t write int filedes,const void buff,size t ...