對於檔案的讀寫操作函式在執行的空間來分,可以分為核心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...