從I O到檔案格式

2022-06-20 10:45:06 字數 1282 閱讀 7310

談效率

#include

ssize_t read(int filedes, void *buf, size_t nbytes);

ssize_t write(int filedes, void *buf, size_t nbytes);

這裡buf的大小嚴重影響效率,如果buf為1的話,比起最優大小可以差近50倍。當buf為4096個位元組時效率最高(不一樣的系統結果也不一樣)。

這裡的read和write都是直接呼叫核心的系統呼叫。(核心怎麼做的先不理會了)

#include

// 標準io只寫了讀寫字元的二進位制的沒寫,主要是說效率差別。

// 一次讀寫乙個字元的函式

int getc(file *fp);

int fgetc(file *fp);

int getchar(void);

int putc(int c, file *fp);

int fputc(int c, file *fp);

int putchar(int c);

// 一次讀寫一行字元的函式

char *fgets(char *restrict buf, int n, file *restrict fp);

char *fputs(const char *restrict str, file *restrict fp);

這裡讀寫乙個字元和一行字元的標準i/o效率差別不是很大,和直接試用write和read的最佳時間接近。

試用標準i/o其實無需考慮緩衝區的大小,知道緩衝區積累了合適的字元時才會進行系統呼叫真正的讀寫。

我的錯誤

就在幾天前剛剛解決了的問題,今天突然又不知道啥原因了,我很鬱悶。

是這樣的,我開啟乙個檔案寫完後又讀取,總是讀不出來。之後我在寫完後,關閉檔案又開啟再寫,這樣是成功的。

查了查中知道了,以前沒這樣隨機讀取過檔案,沒有這種意識:寫完檔案後,檔案的偏移量,是在檔案末尾的,只

有重新設定檔案偏移量才可以。 fseek(fp, 0 , seek_set);

自定製格式檔案

如果檔案很大的話,你很難去把檔案的內容全部讀入記憶體,通過這種偏移,你可以把檔案分割成好多塊,把各個塊的偏移記錄在檔案開頭固定長度內。

如果尋找某塊的內容,把開頭的固定一段讀入記憶體,找到要讀取目標的偏移和長度,就可以很容意單獨的取出檔案內容的一部分。

靈活的東西,往往一開始都是寫死的東西,比如,計算機啟動時從硬碟固定的位址讀取資料。所以不要指望他出生就很靈活。

Oracle 控制檔案格式ctl檔案格式

options skip 1,errors 10 load data characterset zhs16gbk infile into table table name truncate fields terminated by optionally enclosed by trailing nu...

檔案格式 gff格式

gff檔案格式 gff格式是 sanger 研究所定義,是一種簡單的 方便的對於 dna rna以及蛋白質序列的特徵進行描述的一種資料格式,已經成為序列注釋的通用格式,比如基因組的基因 許多軟體都支援輸入或者輸出gff格式。前格式定義的最新版本是版本3。原始定義見 song websitegff是存...

DOS檔案格式 與 UNIX檔案格式 轉換

這裡闡述兩種方法 1.使用vim的方法 在vim下 使用如下命令 set fileformat unix 就可轉換成 unix 檔案格式,也可使用其縮寫形式命令 set ff unix 直接輸入命令 set fileformat 或 set ff 還可查詢當前的命令格式。2.使用linux命令工具 ...