在Linux下一切皆文件,比如:.txt,.c,.h,.jpg,目錄,鍵盤,鼠標,顯示器、硬盤等等都是文件,即IO。文件操作的統一思想:打開文件,讀、寫文件,關閉文件。
文件的類型:
b ? ? 塊設備文件 ? ? ? 存儲設備(硬盤)
c ? ? 字符設備文件 ? ?輸入輸出設備
d ? ? 目錄文件
- ? ? ?普通文件 ? ?.c ? .h ? .txt ? .jpg ? .png ? .mp4 ? a.out ? ?============>ASCII文件 ? ? 二進制文件
l ? ? ?軟鏈接文件 ? ? ??
s ? ? 套接字文件 ? ? ?網絡通信?
p ? ? 管道文件 ? ? ? ? 進程間通信
一? 標準IO:
打開文件:fopen
讀寫文件:
fgetc ? fputc:一個字節讀寫 ? 作用:主要用來操作普通文件(ASCII文件、二進制文件)
fgets ? fputs:一行讀寫? ? ? ? ? 作用:主要用來操作普通文件中的ASCII文件,不能操作二進制文件
fwrite ?fread:按照指定大小讀寫(讀寫結構體) ?作用:主要用來操作普通文件(ASCII文件、二進制文件)
關閉文件:fclose
二? 函數接口:
1. FILE *fopen(const char *pathname, const char *mode);
功能:打開一個文件
參數:
pathname : 要打開文件的文件名
mode :打開方式:
"r" :只讀方式打開, 文件必須要存在
"r+" :讀寫方式打開,文件必須要存在
"w":以寫的方式打開,文件不存在則創建,文件存在則清空
"w+":以讀寫方式打開,文件不存在則創建,文件存在則清空
"a":打開追加寫,文件不存在則創建
"a+":以讀寫方式打開,追加寫,文件不存在則創建
返回值:成功:文件流指針FILE *;失敗: NULL
2. int fclose(FILE *stream);
功能:關閉文件流指針所對應的文件(釋放資源)
文件流:FILE-文件流結構體;FILE *-文件流指針;標準IO在每打開一個文件時,都會將一個文件和一個文件流指針相關聯。
操作系統默認打開的三個流:
stdin :標準輸入流 : 默認關聯鍵盤
stdout:標準輸出流: ?默認關聯顯示終端
stderr:標準出錯流: 默認關聯顯示終端
3. int fputc(int c, FILE *stream);
功能:向文件中寫入一個字節
參數:
c : 要寫入的數據
stream:要寫入的文件流指針
返回值:成功:返回寫入數據的整型值;失敗:EOF(-1)
4. int fgetc(FILE *stream);
功能:從文件中讀一個字符
參數:stream : 要讀的文件流指針
返回值:成功:返回督導字符的ascii;失敗:EOF,讀到文件末尾:EOF
5. int fputs(const char *s, FILE *stream);注意:此函數接口不會寫入'\0'
功能:向文件中寫入一行字符串
參數:
s : 要寫入數據的首地址
stream:寫入的文件流指針
返回值:成功: >=0;失敗 :EOF。
6. char *fgets(char *s, int size, FILE *stream);
功能:讀取一行數據到到s指向的空間,遇到'\n'停止讀
參數:
s:存儲讀取到數據的空間首地址
size :期待讀到的字節數
stream:要讀的文件流
返回值:成功:返回s的首地址;失敗:NULL,文件末尾:NULL
fputs和puts,fgets和gets的區別:
fputs與puts:puts會自動輸出一個'\n'
fgets與gets:
1. gets會將終端最后輸入的'\n'替換成'\0', fgets只是在最終讀到的字符串末尾添加'\0';
2. gets是危險的,因為沒有限制輸入數據的大小,fgets有限制;
3. fgets如果size比要讀區的數據小,最多讀取size-1個字節,最后一個字節位置存放\0;
7. size_t fwrite(const void *ptr, size_t size, size_t nmemb,FILE *stream);
功能:向文件中寫入指定大小的nmemb個元素
參數:
ptr :要寫入數據的首地址
size:寫入的每個元素的大小
nmemb:要寫入的元素的個數
stream:要寫入的文件流指針
返回值:成功:實際寫入的元素個數;失敗:0?
?8. size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
功能:從文件中讀取nmemb個元素
參數:
ptr:要存放讀取到的數據的首地址
size:每個元素的大小
nmemb:期望讀到的元素的個數
stream:要度的文件流指針
返回:成功:返回實際讀到的元素個數;失敗:0,讀到達文件末尾:0
標準IO---文件定位函數:
1.?int fseek(FILE *stream, long offset, int whence);
功能:重新定位文件流位置
參數:
stream:要重新定位的文件
offset:從指定位置進行偏移的偏移量
whence:指定的位置:SEEK_SET:文件開頭,offset:正;SEEK_CUR:當前位置,offset:可正可負;SEEK_END:文件末尾,offset:可正可負
返回值:成功:0;失敗:-1
2. long ?ftell();
功能:返回流所在位置到文件開頭的偏移量
3. rewind();
功能:流復位文件的開頭
4.fprintf()
功能:將格式化后的字符串寫入到文件
5. int sprintf(char *str, const char *format, ...);
功能:將格式化后的字符串寫道str指向的內存空間,字符串的拼接,要將某種基本數據類型轉換成字符串類型
6. fscnaf();
功能:從文件中讀出格式化后的數據
7. sscanf();
功能:從內存中獲取格式化后的數據
時間的函數接口:
time();功能:獲取1970-1-1 0:0:0到現在的秒數
ctime();功能:將秒數轉換成字符串時間
localtime();功能:將秒數轉換成日歷時間
char *strtok(char *str, const char *delim);
功能:分割字符串
參數:
str :需要被分割的字符串
delim:分隔符
返回值:成功:返回分割后的字符串首地址;失敗:NULL