Linux系統程式設計 第三章 緩衝輸入輸出

2021-09-23 18:10:56 字數 1849 閱讀 4734

1、使用者緩衝io:在使用者空間實現的緩衝區,用於將程式的多次輕量級的io請求組合起來,提高操作效率。

2、標準io:屬於c語言標準庫,因此檔案開啟,關閉,讀寫都是通過標準io庫完成的。

3、檔案指標:file:在c標準庫中,不屬於核心,實際上對映到核心的檔案描述符

4、檔案操作:

一下提到的緩衝區是由c標準庫維持的,區別於核心的緩衝區。不執行系統呼叫,多次輕量級的訪問合併,再執行系統呼叫。

#include file* fopen(const char * path, const char * mode);

file* fdopen (int fd, const char *mode);

int fclose (file *stream);

int fcloseall (void);

int fgetc (file *stream);/*讀取單個位元組,並強制轉換為int型別*/

int ungetc (int c, file *stream);/*將c轉換為字元寫入流中,成功返回c*/

char * fgets (char *str, int size, file *stream);/*按行讀取,讀取size-1個位元組,末尾加\n*/

int fputc (int c, file *stream);

int fputs (const char *str, file *stream);

size_t fread (void *buf, size_t size, size_t nr, file *stream);/*讀取複雜的二進位制資料*/

size_t fwrite (void *buf, size_t size, size_t nr, file *stream);

/*因為變數大小、對齊、填充、位元組序的不同,乙個程式寫的二進位制檔案,對另乙個程式可能是不能讀的,即使是同一程式,在不同的處理器上,讀取也是不一樣的,只有在特定abi的機器上才能保證

*//*定位流,標準io提供了一些等價於系統呼叫lseek()的函式*/

int fseek (file *stream, long offset, int whence);/*whence : seek_set、seek_cur、seek_end*/

int fsetpos (file *stream, fpos_t *pos);/*等價於fseek時whence等於seek_set*/

void rewind (file *stream); 等價於int fseek (file *stream, 0, seek_set);

//獲取當前流位置

int fgetpos (file *stream, fpos_t *pos);

//清洗乙個流

int fflush (file *stream);/*呼叫該函式的時候,stream流指向的所有未寫入的資料會被清洗到核心緩衝中。更多的是呼叫fflush後立即呼叫fsync,同步寫入磁碟*/

//獲取相關聯的檔案描述符

int fileno (file *stream);//在使用檔案描述符讀寫之前,應該先沖洗該流的內容

5、控制緩衝

緩衝方式:不緩衝,行緩衝(標準輸出的預設方式)、塊緩衝(檔案的預設方式)

int setvbuf (file *stream, char *buf, int mode, size_t size);

/*_ionbf無緩衝 _iolbf行緩衝 _iofbf塊緩衝*/

6、執行緒安全。標準io函式本質上是執行緒安全的。提議使用鎖來對檔案流實現所有者執行緒的安全訪問。

7、標準io缺點:需要複製兩次,先從核心快取複製到io緩衝區,再從io緩衝區複製到本地記憶體,存在兩個副本。

linux系統程式設計 第三章

作為檔案系統的抽象,它是io中最基本的概念,所有的磁碟操作都是基於塊進行的。作業系統效率隨著系統呼叫次數的增多而急劇下降。每次讀寫操作位元組數太少,會導致讀寫次數增多而降低效率 每次讀寫不是塊大小的整數倍,也會因為對齊資料而降低效率。系統呼叫stat可以輕鬆指定裝置的塊大小。現實中程式很少以塊為單位...

Linux系統程式設計(第三章)筆記

由於塊是檔案系統中最小儲存單元的抽象,在核心中,所有檔案系統操作都是基於塊來執行。因此所有i o操作都是在塊大小或者塊大小的整數倍上執行。假設要讀取1024個位元組,每次讀乙個位元組需要1024次呼叫,而如果乙個讀取1024位元組的塊則只需要呼叫一次。對於這種提公升其效能的途徑是 使用者緩衝i o ...

程式設計珠璣第三章

第三章寫的有點太簡單了,可能作者是想在後面章節裡再詳細說吧!這一章就是作者說的幾句話印象還是很深刻。程式設計師在節省空間方面無計可施時,將自己從 中解脫出來,退回起點並記者並集 中精力研究資料,常常能有奇效。資料的 表示形式是程式設計的根本。正如人月神話的作者說 只要給我你設計的表,我就對你的程式一...