C語言 檔案的輸入輸出

2021-06-20 09:35:44 字數 4304 閱讀 9929

檔案的輸入輸出函式分為兩大類

1.有緩衝區的輸入輸出(buffered i/o)  資料先寫到緩衝區,滿了再寫入檔案

2.無緩衝區的輸入輸出(unbuffered file i/o)  直接操作檔案

有緩衝區的輸入輸出函式,含於stdio.h

fopen()

開啟乙個檔案

fclose()

關閉乙個檔案

putc()

輸出乙個字元到檔案,巨集定義

getc()

從檔案讀取乙個字元,巨集定義

fgetc()

輸出乙個字元到檔案

fputc()

從檔案讀取乙個字元

fgets()

獲取一串字元

fputs()

輸出一串字元

fprintf()

輸出資料至檔案

fscanf()

讀取資料

feof()

測試是否到了檔案結束

ferror()

測試檔案操作是否正常

fseed()

設定準備讀取檔案資料的位置

rewind()

將準備讀取檔案資料位置,設定在起始位置

remove()

檔案的刪除

fopen()

定義函式 file * fopen(const char * path,const char * mode); 

函式說明 引數path字串包含欲開啟的檔案路徑及檔名,引數mode字串則代表著流形態。

mode有下列幾種形態字串:

r 開啟唯讀檔案,該檔案必須存在。

r+ 開啟可讀寫的檔案,該檔案必須存在。

w 開啟只寫檔案,若存在則覆蓋,若不存在則建立。

w+ 開啟可讀寫檔案,若存在則覆蓋。若不存在則建立。

a 以附加的方式開啟只寫檔案。若檔案不存在,則會建立該檔案,如果檔案存在,則附加。

a+ 以附加方式開啟可讀寫的檔案。若檔案不存在,則會建立該檔案,如果檔案存在,則附加。

b 字元開啟為二進位制檔案。rb、w+b或ab+等組合,

檔案順利開啟後,返回檔案指標。開啟失敗則返回null,並把錯誤**存在error 中,若開啟檔案失敗,接下來的讀寫動作也無法順利進行,所以在fopen()後請作錯誤判斷及處理。

fclose()  關閉檔案成功返回0  

關閉前會將緩衝區資料寫入檔案,否則緩衝區資料丟失。

乙個c語言程式,同一時間開啟檔案一般不超過20個

putc()   執行成功返回字元值,失敗返回eof

getc()

執行成功返回讀取字元,結尾處返回eof 再stdio.h內,此值是-1

feof()   讀取位置在末端返回非零

ferror() 前乙個對檔案的操作有錯誤則返回非零,否則返回0  主要供設計系統程式的人員使用

fwrite(void *buffer,int num_byte,int count,file *fp);

資料緩衝區,讀取的檔案位元組數,多少寫入的資料,檔案指標

將某個資料緩衝區內容寫入檔案

fread()讀入緩衝區,引數與fwrite相同

fseek(file *fp,long num_byte,int origin)   設定讀取位置 

檔案指標,相對位置,相對位置方式

origin格式 0開頭  1當前位置  2檔案末端

預設的檔案指標

stdin

標準輸入裝置鍵盤

stdout

標準輸出裝置螢幕

stderr

標準錯誤輸出裝置螢幕

stdaux

標準協裝置串列埠

stdprn

標準列印裝置印表機

————————————————————————————————————

無緩衝區的輸入輸出函式,含於fcntl.h    unix系統內規定的函式

int _open(char *filename,int mode,int access)

mode:

檔案指標指向結尾

_o_creat

產生供寫入的檔案

_o_rdonly

產生唯讀檔案

_0_rdwr

產生可讀寫檔案

_0_trunc

開啟並設定已存在檔案為空白

_o_wronly

開啟只寫檔案

_o_binary

以二進位制方式開啟檔案

_o_text

以文字方式開啟檔案

access: 訪問方式,可忽略,若加必須包含sys\types.h 和sys\stat.h可同時開啟用'|'隔開

_s_iwrite

寫入許可

_s_iread

讀取許可

開啟成功返回整數,稱為檔案控制代碼(file handle) 開啟失敗返回-1

int _close(檔案控制代碼) 成功返回0  失敗返回-1

int _read(int fd,void *buf,int size);   buf儲存讀取的資料,size表示要讀取字元數,成功返回所讀取字元數量,失敗返回-1

int _write(int fd,void *buf,int size)  將緩衝區資料寫入檔案

int _lseek(int fd,long num_byte,int origin);   num_byte所要讀取與origin的相對位置

origin:  seek_set 起始位置   seek_cur 當前位置    seek_end 末端位置

預設檔案控制代碼

0標準輸入裝置鍵盤

1標準輸出裝置螢幕

2標準錯誤輸出裝置螢幕

3標準協裝置串列埠

4標準列印裝置印表機

預設檔案控制代碼使用前要設定控制代碼型別

_setmode(檔案控制代碼,mode)  

mode:  _o_binay 二進位制檔案      _o_text 文字檔案

c語言中open函式

作用:開啟和建立檔案。

簡述:123

4#include

int open(const char *pathname, int flags);

int open(const char *pathname, int flags, mode_t mode);

返回值:成功則返回檔案描述符,否則返回 -1

對於open函式來說,第三個引數僅當建立新檔案時(即 使用了o_creat 時)才使用,用於指定檔案的訪問許可權位(access permission bits)。pathname 是待開啟/建立檔案的posix路徑名(如/home/user/a.cpp);flags 用於指定檔案的開啟/建立模式,這個引數可由以下常量(定義於fcntl.h)通過邏輯位或邏輯構成。

1.o_rdonly 唯讀模式

2.o_wronly 只寫模式

3.o_rdwr 讀寫模式

開啟/建立檔案時,至少得使用上述三個常量中的乙個。以下常量是選用的:

2.o_creat 如果指定檔案不存在,則建立這個檔案

3.o_excl 如果要建立的檔案已存在,則返回 -1,並且修改 errno 的值

4.o_trunc 如果檔案存在,並且以只寫/讀寫方式開啟,則清空檔案全部內容(即將其長度截短為0)

5.o_noctty 如果路徑名指向終端裝置,不要把這個裝置用作控制終端。

6.o_nonblock 如果路徑名指向 fifo/塊檔案/字元檔案,則把檔案的開啟和後繼 i/o

設定為非阻塞模式

(nonblocking mode)

以下三個常量同樣是選用的,它們用於同步輸入輸出

1.o_dsync 等待物理 i/o 結束後再 write。在不影響讀取新寫入的資料的

前提下,不等待檔案屬性更新。

1.o_rsyncread等待所有寫入同一區域的寫操作完成後再進行

2.o_sync 等待物理 i/o 結束後再write,包括更新檔案屬性的 i/o

open返回的檔案描述符一定是最小的未被使用的描述符。

如果 name_max(檔名最大長度,不包括'\0')是 14,而我們想在當前目錄下建立檔名長度超過 14 位元組的檔案,早期的 system v 系統(如 svr2)會截斷超出部分,只保留前 14 個位元組;而由 bsd 衍生的(bsd-derived)系統會返回錯誤資訊,並且把 errno 置為 enametoolong。

posix.1 引入常量 _posix_no_trunc 用於決定是否截斷長檔名/長路徑名。如果_posix_no_trunc 設定為禁止截斷,並且路徑名長度超過 path_max(包括 '\0'),或者組成路徑名的任意檔名長度超過 name_max,則返回錯誤資訊,並且把 errno 置為 enametoolong。

C語言 檔案的輸入輸出

檔案的輸入輸出函式分為兩大類 1.有緩衝區的輸入輸出 buffered i o 資料先寫到緩衝區,滿了再寫入檔案 2.無緩衝區的輸入輸出 unbuffered file i o 直接操作檔案 有緩衝區的輸入輸出函式,含於stdio.h fopen 開啟乙個檔案 fclose 關閉乙個檔案 putc ...

C語言檔案輸入輸出總結

檔案輸入輸出 1 fopen include file fopen const char fname,const char mode mode方式 r 開啟乙個檔案,可以讀取檔案。w 開啟乙個檔案,可以寫入檔案,先將檔案的長度截為零。如果該檔案不存在則先建立之。a 開啟乙個檔案,可以寫入檔案,向已有...

C語言輸入輸出

i o函式 printf 和scanf 輸出程式 函式的呼叫是在c語言標頭檔案 stdio.h 中包含這些像printf 輸入輸出 printf 一般形式如下 printf 格式化字串 輸出參數列 鍵盤輸入函式 顯示器輸出函式printf putchar puts 磁碟檔案操作creatnew 建立...