檔案系統程式設計 標準I O庫

2021-08-05 21:42:18 字數 2038 閱讀 2300

printf函式向標準輸出寫入多個字元,所寫入的字元被放在乙個使用者態的緩衝區中,直到碰到乙個換行符,系統才呼叫write函式將緩衝區中的資料寫入標準輸出,也就是說,在換行符之前寫入的字元並不會立即出現在控制台螢幕上。

系統呼叫要請求核心的服務,會引發cpu模式的切換,期間會有大量的堆疊資料儲存操作,開銷比較大。如果頻繁地進行系統呼叫,會降低應用程式的執行效率。有了緩衝機制以後,多個讀寫操作可以合併為一次系統呼叫,減少了系統呼叫的次數,將大大提高程式的執行效率。

標準i/o函式並不直接操作檔案描述符,而是使用檔案指標。檔案指標和檔案描述符是一一對應的關係,這種對應關係由標準i/o庫自己內部維護。檔案指標指向的資料型別為file型,但應用程式無須關心它的具體內容。

在標準i/o中,乙個開啟的檔案稱為流(stream),流可以用於讀(輸入流)、寫(輸出流)或讀寫(輸入輸出流)。每個程序在啟動後就會開啟三個流,分別對應:stdin(標準輸入流)、stdout(標準輸出流)以及stderr(標準錯誤輸出流)。

fopen用於開啟乙個標準i/o流

#include

file *fopen(const

char *path, const

char *mode);

引數mode:

r」或」rb」:以唯讀方式開啟。

「w」或」wb」:以只寫方式開啟,並把檔案長度截短為零。

「a」或」ab」:以寫方式開啟,新內容追加在檔案尾。

「r+」或」rb+」或」r+b」:以更新方式開啟(讀和寫)。

「w+」或」wb+」或」w+b」:以更新方式開啟,並把檔案長度截短為零。

「a+」或」ab+」或」a+b」:以更新方式開啟,新內容追加在檔案尾

fread()用於從乙個檔案流裡讀取資料。

#include

size_t fread(void *ptr, size_t size, size_t nmemb,file *stream);

#include 

size_t fwrite(const

void *ptr, size_t size, size_t nmemb,

file *stream);

fclose()函式用於關閉指定的檔案流。

#include

int fclose(file *fp);

出了這幾個主要的操作,還有一些其他的操作

fflush()用於把檔案流裡所有未寫出的資料立即寫出。

#include

int fflush(file *stream);

fseek()用於在檔案流裡為下一次讀寫操作指定位置。

#include

int fseek(file *stream, long offset, int whence);

fgetc()從檔案流裡取出下乙個位元組並把它作為乙個字元返回。當它到達檔案結尾或出現錯誤時,返回eof。getc()和fgetc()一樣,但它有可能被實現為乙個巨集。getchar()相當於getc(stdin)。

#include

int fgetc(file *stream);

intgetc(file *stream);

int getchar(void);

fputc()把乙個字元寫到乙個輸出檔案流中,它返回寫入的值,如果失敗,則返回eof。類似fgetc()和getc(),putc()的作用也相當於fputc(),但它可能被實現為乙個巨集。putchar()相當於putc(c, stdout),它把單個字元寫到標準輸出。

#include

int fputc(int c, file *stream);

int putc(int c, file *stream);

int putchar(int c);

關於檔案的操作大概也就這些了。在我們進一步的學習之後,用的更多的還是標準i/o庫中的內容,在以後的學習中相信檔案程式設計的內容會起到很大的作用。

系統程式設計之檔案系統程式設計

系統呼叫 所有的作業系統都提供多種服務的入口點,程式由此向核心請求服務。這些可直接進入核心的入口點被稱為系統呼叫。不同作業系統提供了自己的一套系統呼叫,所以系統呼叫無法實現跨平台使用。而且頻繁地系統呼叫,在使用者態和核心態之間切換,很耗費資源,效率不高。c標準庫提供了操作檔案的標準i o函式庫,與系...

linux 系統程式設計 標準IO 快取

1 什麼是標準io?與檔案io的區別?檔案io 是直接呼叫核心提供的系統呼叫函式,標頭檔案是unistd.h 標準io 是通過c庫函式間接呼叫系統呼叫函式,標頭檔案是 stdio.h 之前學過 輸入輸入相關的函式,都是和標準的輸入 鍵盤 標註的輸出 顯示器 相關 getchar 從鍵盤得到乙個字元,...

檔案系統之標準IO與系統呼叫IO

io操作是我們程式執行的基礎,資料在程式執行結束時需要儲存就必須使用io操作。io主要包括兩類 標準io與系統io 一 標準io 標準io是為了避免跨平台移植引起的不必要異常,指定的一系列標準函式,無論linux windows都可以使用。標準io常用api包括 fopen fwrite fread...