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