常用標準I/O庫函數總結

1:fopen()

fopen()函數主要用於對文件和終端的輸入輸出。但是如果要對設備的行爲進行更爲明確的行爲控制,那最好使用底層系統調用,因爲這樣可以避免庫函數帶來的一些非預期的潛在副作用。

函數原型:

#include <stdio.h>
 
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 <stdio.h>
 
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 <stdio.h>
 
size_t fwrite(const void *ptr, size_t size, size_t items, FILE *stream);
 
 
它的接口和fread很像,參考fread。
 
 
 
4:fclose()函數
 
 
fclose()函數關閉指定的文件劉stream,使所有未寫出的內容全部寫出。
 
 
函數原型:
 
#include <stdio.h>
 
int fclose(FILE *stream);
 
 
stream:指定要關閉的文件流stream
 
返回值:如果成功返回0,失敗返回EOF,同時會向全局變量errorn寫入錯誤信息碼。
 
 
 
5:fflush()函數
 
 
fflush()函數的主要作用是把文件流的所有未寫出的內容立刻寫出。
 
 
函數原型:
 
#include <stdio.h>
 
int fflush(FILE *stream);
 
接口同fclose.
 
 
 
 
6:fseek()函數
 
 
fseek()函數主要作用是在文件流裏面爲下一次讀寫指定位置。
 
 
函數原型:
 
#include <stdio.h>
 
int fseek(FILE *stream, long int offset, int whence);
 
 
stream:指定操作的文件流
 
offset:指定位置
 
whence:指定偏移方式,具體形式類似系統調用lseek。
 
返回值:成功返回0,失敗返回-1,同時設置errno指出錯誤。
 
 
 
 
7:fgetc,getc,getchar函數
 
 
fgetc()從文件流取出下一個字節並把它作爲一個字符返回,如果到達文件結尾或者出現錯誤的時候返回EOF。其中getchar()從標準輸入讀取數據。
 
 
函數原型:
 
 
#include <stdio.h>
 
int fgetc(FILE *stream);
int getc(FILE *stream);
int getchar();
 
 
 
8:fputc,putc,putchar函數
 
 
fputc()函數把一個字符寫道一個輸出文件流中。如果成功返回寫入的值,失敗則返回EOF。其中puchar()函數將單個字符寫道標準輸出。
 
 
#include <stdio.h>
 
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 <stdio.h>
 
char *fgets(char *ptr, int n, FILE *stream);
char *gets(char *ptr);
 
 
 
10:printf,fprintf,sprintf函數
 
 
printf系列函數能夠對各種不同類型的參數進行格式化編排和輸出。
 
 
printf函數把自己的輸出送到標準輸出;
 
fprintf函數把自己的輸出送到一個指定的文件流;
 
sprintf函數把自己的輸出和一個結尾空字符寫到s指向的緩衝區。
 
 
 
函數原型:
 
#include <stdio.h>
 
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 <stdio.h>
 
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 <stdio.h>
 
int ferror(FILE *stream);
int feof(FILE *stream);
void clearerr(FILE *stream);
 
 
 
 
 
13:文件流和文件描述符
 
 
每個文件流都有一個底層描述符相關聯。
 
 
fileno函數可以確定文件流使用那個底層描述符;
 
fdopen函數在一個已經打開的文件描述符上創建一個新的文件流。
 
 
 
函數原型:
 
#include <stdio.h>
 
int fileno(FILE *stream);
 
FILE *fdopen(int fildes, const char *mode);
發佈了0 篇原創文章 · 獲贊 1 · 訪問量 8550
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章