1:fopen()
fopen()函式主要用於對檔案和終端的輸入輸出。但是如果要對裝置的行為進行更為明確的行為控制,那最好使用底層系統呼叫,因為這樣可以避免庫函式帶來的一些非預期的潛在***。
函式原型:
#include
file *fopen(const char *filename, const char *mode);
filaname:指定的檔名,fopen會把它與乙個檔案流關聯起來。
mode:指定檔案的開啟方式
返回值:成功時返回乙個file*指標,失敗返回null值,null定義在stdio.h中。
mode引數如下所示:
"r"/"rb":唯讀方式開啟
"w"/"wb":只寫方式開啟,把檔案長度截為0(你可把它想象為》)
"a"/"ab":只寫方式開啟,新內容追加到檔案尾(你可以想象成》)
"r+"/"r+b"/"rb+":以修改方式開啟(讀寫)
"w+"/"w+b"/"wb+":以修改方式開啟,同時把檔案內容截為0
"a+"/"a+b"/"ab+":以修改方式開啟,新內容追加到檔案結尾
linux會把所有檔案都看成是二進位制檔案,所以那個"b"表示檔案是二進位制。
2:fread()函式
fread()函式的主要作用是從乙個檔案流裡讀取資料,資料從stream讀到由ptr指定的資料緩衝區裡面。
函式原型:
#include
size_t fread(void *ptr, size_t size, size_t nitems, file *stream);
ptr:資料讀到ptr指定的緩衝區裡面。
size:每個資料記錄的長度(類似與char,int,long,float之類,指代每次讀取塊的大小)
nitems:傳輸的記錄個數
stream:指定要讀取的資料緩衝區
返回值:讀到緩衝區的記錄個數(非位元組),如果讀到檔案尾,其返回值可能小於nitems,甚至可以是0(讀取檔案為空)。
3:fwrite()函式
fwrite()函式從stream獲取資料記錄寫到ptr中,返回值是成功寫入的記錄個數。
函式原型:
#include
size_t fwrite(const void *ptr, size_t size, size_t items, file *stream);
它的介面和fread很像,參考fread。
4:fclose()函式
fclose()函式關閉指定的檔案劉stream,使所有未寫出的內容全部寫出。
函式原型:
#include
int fclose(file *stream);
stream:指定要關閉的檔案流stream
返回值:如果成功返回0,失敗返回eof,同時會向全域性變數errorn寫入錯誤資訊碼。
5:fflush()函式
fflush()函式的主要作用是把檔案流的所有未寫出的內容立刻寫出。
函式原型:
#include
int fflush(file *stream);
介面同fclose.
6:fseek()函式
fseek()函式主要作用是在檔案流裡面為下一次讀寫指定位置。
函式原型:
#include
int fseek(file *stream, long int offset, int whence);
stream:指定操作的檔案流
offset:指定位置
whence:指定偏移方式,具體形式類似系統呼叫lseek。
返回值:成功返回0,失敗返回-1,同時設定errno指出錯誤。
7:fgetc,getc,getchar函式
fgetc()從檔案流取出下乙個位元組並把它作為乙個字元返回,如果到達檔案結尾或者出現錯誤的時候返回eof。其中getchar()從標準輸入讀取資料。
函式原型:
#include
int fgetc(file *stream);
int getc(file *stream);
int getchar();
8:fputc,putc,putchar函式
fputc()函式把乙個字元寫道乙個輸出檔案流中。如果成功返回寫入的值,失敗則返回eof。其中puchar()函式將單個字元寫道標準輸出。
#include
int fputc(int c, file *stream);
int putc(int c, file *stream);
int putchar();
9:fgets()和gets()函式
fgets()函式從輸入檔案流stream讀取乙個字串,並把讀到的字元寫到ptr指向的緩衝區,當遇到如下情況停止:遇到換行符,已經傳輸n-1個字元,或者到達檔案尾。它會把遇到的換行符也傳遞到接收字串裡去,再加上乙個表示結尾的空位元組\0。
gets()函式從標準輸入讀取資料並丟棄遇到的換行符,它在接受字串的尾部加上null。
函式原型:
#include
char *fgets(char *ptr, int n, file *stream);
char *gets(char *ptr);
10:printf,fprintf,sprintf函式
printf系列函式能夠對各種不同型別的引數進行格式化編排和輸出。
printf函式把自己的輸出送到標準輸出;
fprintf函式把自己的輸出送到乙個指定的檔案流;
sprintf函式把自己的輸出和乙個結尾空字元寫到s指向的緩衝區。
函式原型:
#include
int printf(const char *format, ...);
int sprintf(char *s, const char *format, ...);
int fprintf(file *stream, const char *format, ...);
format:指定輸出的格式;
s:字串緩衝區
stream:指定的檔案流
11:scanf,fscanf和sscanf函式
scanf系列函式從乙個檔案流讀取資料並寫到指定位址的變數。
scanf函式將讀入的值儲存在對應的變數裡;
函式原型:
#include
int scanf(const char *format, ...);
int fscanf(file *stream, const char *format, ...);
int ssacnf(const char *s, const char *format, ...);
12:檔案流錯誤
通過檢查檔案流的狀態來確定是否發生錯誤;
ferror函式測試乙個檔案流的錯誤標識,如果被設定返回乙個非0值,否則返回0.
feof函式測試乙個檔案流的檔案尾標識,如果被設定就返回乙個非0值,否則返回0.
clearerr函式清楚有stream指定的檔案流的檔案尾標識和錯誤標識。
函式原型:
#include
int ferror(file *stream);
int feof(file *stream);
void clearerr(file *stream);
13:檔案流和檔案描述符
每個檔案流都有乙個底層描述符相關聯。
fileno函式可以確定檔案流使用那個底層描述符;
fdopen函式在乙個已經開啟的檔案描述符上建立乙個新的檔案流。
函式原型:
#include
int fileno(file *stream);
file *fdopen(int fildes, const char *mode);
STL標準庫函式總結
平時stl自己用的很少,很多庫函式都不是很熟悉,趁著最近有空,將stl的知識學習一下。主要學習一下,pair,vector,set,vector,stack,queue,map,string.位於標頭檔案 iostream 中用來表示乙個二元組或元素對 1.1 使用pair 定義乙個pair物件表示...
系統I O函式與C標準庫函式
先上圖 read write函式常常被稱為 unbuffered i o。指的是無使用者輸入級緩衝區,但不保證不使用核心緩衝區。使用者程式在讀寫檔案時既可以呼叫c標準i o庫函式,也可以直接呼叫底層的系統i o函式,有什麼區別呢?c標準庫的i o緩衝區有三種型別 全緩衝 行緩衝和無緩衝。如果緩衝區寫...
檔案I O之C標準庫函式和系統庫函式差別
1.首先c標準庫函式是工作在系統庫函式之上的。c標準庫函式在讀寫檔案時候都有乙個檔案流指標。file fp null fp fopen f path,r fp檔案流指標,其指向結構體例如以下圖所看到的。檔案描寫敘述符指向磁碟檔案。在進行檔案讀寫操作時候是先讀寫到緩衝區。然後再呼叫系統應用層api w...