核心IO和標準IO

2022-08-17 02:54:15 字數 3287 閱讀 3495

對於檔案的讀寫操作函式在執行的空間來分,可以分為核心io(主要在核心中執行)和標準io(主要在使用者空間中執行).

核心io需要自己建立和管理快取,而標準io是自動分類快取,一般來說,核心io的效率高於標準io,但是差距不是很大,考慮移植性,還是建議使用標準io(只要是支援標準c語言就支援標準io).

無論是標準io還是核心io都是對檔案的資訊,讀寫檔案的指標進行記錄的,呼叫相應的函式可以進行檔案資訊的讀取和指標的修改.

以下為io相關的函式的標頭檔案,使用,引數,返回值的說明

linux c語言io 函式(核心io) :open/close/lseek/read/write

標頭檔案:,,//開啟檔案

open("檔案路徑及檔名",開啟方式,(如果建立則有這個引數,設定檔案許可權));返回值位int型,-1為失敗,正整數為成功,是該檔案的識別符號;

標頭檔案:

close(int (開啟檔案的檔案識別符號));//關閉檔案

標頭檔案:,//每個檔案的開啟都會有乙個讀寫指標,該函式是調整檔案的讀寫指標到指定的位置

lseek(int fildes,新的讀寫位置(作為whence的引數),int whence); fildes :檔案描述符 ;whence:操作。

返回值:-1為出錯。成功為返回當前的指標位置。

標頭檔案://讀檔案的內容

read(int fd,void *buf,int count);fd:檔案描述符;buf:將讀出的檔案存放的地方;count:一次讀取的位元組數

返回值:-1為出錯(出錯則讀寫指標不知道指向了**)返回0則是讀到檔案尾或者遇到沒法讀取的資料。正常是返回讀取的實際位元組數

標頭檔案://進行寫操作

write(int fd,const void *buf,int count);fd:檔案描述符;buf:需要寫的內容 ;count:一次寫了的位元組數;

返回值:-1出錯,正常則返回實際位元組數。

標準c語言io函式(標準io):

fopen/fclose/

fputs/fgets/

fflush/ftell

fseek/rewind/

gets/puts/

fprintf/sprintf/

fgetc/fputc/

feof/

ferror/clearerr/

fread/fwrite/

標頭檔案://開啟檔案

fopen(const char * path,const char *mode);path:要開啟的檔案路徑和檔名;mode:開啟方式

返回值:file* 類是與open 的檔案識別符號 開啟失敗則返回null;

標頭檔案://關閉檔案

fclose(file *stream);

返回值:-1則有錯誤發生,成功返回0;

標頭檔案://將檔案流中讀取字串到format中

int fscanf(file*stream,const char *format,......);

返回值:成功則返回引數數目,失敗則返回-1

標頭檔案://根據字串格式轉化資料,並將結果輸入到指定檔案中

int fprintf(file*stream,const char *format,......);

返回值:成功返回寫的位元組數,錯誤則-1;

標頭檔案://將檔案內容讀取到s中

fgets(char *s,int size, file *stream);*s:儲存檔案內容,size:讀取的位元組數(讀取size - 1個位元組,最後會加上null);

返回值:char*,成功則返回s指標,失敗則返回null

標頭檔案://將檔案內容寫入檔案中

fputs(const char *s,file*stream);

返回值:成功返回寫的位元組數,錯誤則-1;

標頭檔案://從檔案中讀取乙個字元

fgetc(file*stream);

返回值:正常則返回讀取到的字元,若讀到-1則表示讀到檔案尾了。

標頭檔案: //將指定字元寫入檔案流

fputc(int c,file* stream);c 是寫入的值,會自動轉化為unsigned char 然後再寫入檔案

返回值:-1寫入失敗 ,正常則返回成功寫入的字元 int

標頭檔案://由標準輸入裝置內讀進一字串

char * gets(char *s);讀取字元到s中,讀取到換行字元或者讀取到檔案尾為之,

最後加上null作為字串結束

返回值:正常返回s指標,返回null則表示發生錯誤。

標頭檔案://將字串寫到標準輸出(stdout)

int puts(char *str);

返回值:成功返回非負值,失敗返回-1;

標頭檔案://強制重新整理快取區,將快取區內容寫入檔案

fflush(file*stream);

返回值:成功0,失敗-1

標頭檔案://移動檔案讀取指標

fseek(file*stream,long offset,int whence(巨集));offset:檔案讀取指標移動的位置。

fseek(file*stream,0,seek_set/seek_end);移動指標到檔案頭/檔案尾

返回值:成功0,失敗-1

標頭檔案://將檔案讀取指標移動到檔案開頭

void rewind(file*stream);

標頭檔案://獲取檔案流目前的讀寫位置

long ftell(file*stream);

返回值:-1錯誤,成功返回當前的檔案讀寫指標

標頭檔案://檢查檔案讀取指標是否已經到了檔案尾

int feof(file*stream);

返回值:到了檔案尾則返回非零值,否則返回0

標頭檔案://檢查檔案流是否有錯誤發生

int ferror(file*stream);

返回值:發生錯誤返回非零。無錯誤返回0;

標頭檔案://清除檔案流中的錯誤旗標

void clearerr(file*stream);

標頭檔案://從檔案流讀取資料

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

ptr:存放讀取到的內容

size:讀取乙個單元的位元組數

nmemb:讀取的單元數

返回值:返回值比nmemb小那麼表示讀到檔案尾或者有錯,需要feof(),或者ferror()來判斷

標頭檔案://將資料寫到檔案流中

int fwrite(const void *ptr,int size,int nmemb,file*stream);//引數類同fread()

返回值:返回實際寫入nmemb

I O 標準 I O 實驗

一 測試標準 i o 一次可以同時開啟多少個檔案 1 實驗思路 利用迴圈同時開啟檔案,直到不能開啟 2 如下 二 fgetc 和 fputc 實現拷貝檔案並輸出檔案行數 1 實驗思路 開啟檔案,用 fgetc 讀取,然後 fputc 輸出 2 如下 三 fgetc 和 putchar 實現只輸出字母...

標準IO和不帶快取的IO

分類 unix程式設計 2014 09 17 00 47 42人閱讀收藏 舉報io快取c 最近在看 unix環境高階程式設計 這是自己的一些心得體會。不帶快取的io是什麼,比如read 函式和write 函式,這兩個函式的函式原型如下 需要注意的是這兩個函式都有乙個引數就是buf,這個引數用來指向讀...

檔案I O和標準I O的區別

檔案i o 檔案i o稱之為不帶快取的io。不帶快取指的是每個read,write都呼叫核心中的乙個系統呼叫。也就是一般所說的低階i o 作業系統提供的基本io服務,與os繫結,特定於linix或unix平台。標準i o 標準i o是ansi c建立的乙個標準i o模型,是乙個標準函式包和stdio...