c語言文件打開關(guān)閉函數(shù)名 c語言如何打開關(guān)閉文件

c語言程序設計文件打開關(guān)閉

在C語言中用一個指針變量指向一個文件,這個指針稱為文件指針。通過文件指針就可對它所指的文件進行各種操作。

三水網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)!從網(wǎng)頁設計、網(wǎng)站建設、微信開發(fā)、APP開發(fā)、響應式網(wǎng)站等網(wǎng)站項目制作,到程序開發(fā),運營維護。創(chuàng)新互聯(lián)2013年至今到現(xiàn)在10年的時間,我們擁有了豐富的建站經(jīng)驗和運維經(jīng)驗,來保證我們的工作的順利進行。專注于網(wǎng)站建設就選創(chuàng)新互聯(lián)。

定義說明文件指針的一般形式為:

FILE *指針變量標識符;

其中FILE應為大寫,它實際上是由系統(tǒng)定義的一個結(jié)構(gòu),該結(jié)構(gòu)中含有文件名、文件狀態(tài)和文件當前位置等信息。在編寫源程序時不必關(guān)心FILE結(jié)構(gòu)的細節(jié)。例如:

FILE *fp;

表示fp是指向FILE結(jié)構(gòu)的指針變量,通過fp即可找存放某個文件信息的結(jié)構(gòu)變量,然后按結(jié)構(gòu)變量提供的信息找到該文件,實施對文件的操作。習慣上也籠統(tǒng)地把fp稱為指向一個文件的指針。

文件在進行讀寫操作之前要先打開,使用完畢要關(guān)閉。所謂打開文件,實際上是建立文件的各種有關(guān)信息,并使文件指針指向該文件,以便進行其它操作。關(guān)閉文件則斷開指針與文件之間的聯(lián)系,也就禁止再對該文件進行操作。

在C語言中,文件操作都是由庫函數(shù)來完成的。在本章內(nèi)將介紹主要的文件操作函數(shù)。

文件的打開(fopen函數(shù))

fopen函數(shù)用來打開一個文件,其調(diào)用的一般形式為:

文件指針名 = fopen( 文件名, 使用文件方式 );

其中:

“文件指針名”必須是被說明為FILE 類型的指針變量;

“文件名”是被打開文件的文件名;

“使用文件方式”是指文件的類型和操作要求;

“文件名”是字符串常量或字符串數(shù)組。

例如:

FILE *fp;

fp=("file a","r");

其意義是在當前目錄下打開文件file a,只允許進行“讀”操作,并使fp指向該文件。又如:

FILE *fphzk;

fphzk=("c:\\hzk16","rb");

其意義是打開C驅(qū)動器磁盤的根目錄下的文件hzk16,這是一個二進制文件,只允許按二進制方式進行讀操作。兩個反斜線“\\ ”中的第一個表示轉(zhuǎn)義字符,第二個表示根目錄。

使用文件的方式共有12種,下面給出了它們的符號和意義。

文件使用方式

意義

rt 只讀打開一個文本文件,只允許讀數(shù)據(jù)

wt 只寫打開或建立一個文本文件,只允許寫數(shù)據(jù)

at 追加打開一個文本文件,并在文件末尾寫數(shù)據(jù)

rb 只讀打開一個二進制文件,只允許讀數(shù)據(jù)

wb 只寫打開或建立一個二進制文件,只允許寫數(shù)據(jù)

ab 追加打開一個二進制文件,并在文件末尾寫數(shù)據(jù)

rt+ 讀寫打開一個文本文件,允許讀和寫

wt+ 讀寫打開或建立一個文本文件,允許讀寫

at+ 讀寫打開一個文本文件,允許讀,或在文件末追加數(shù)據(jù)

rb+ 讀寫打開一個二進制文件,允許讀和寫

wb+ 讀寫打開或建立一個二進制文件,允許讀和寫

ab+ 讀寫打開一個二進制文件,允許讀,或在文件末追加數(shù)據(jù)

對于文件使用方式有以下幾點說明。

1) 文件使用方式由r、w、a、t、b 和 + 六個字符拼成,各字符的含義是:

r(read):讀

w(write):寫

a(append):追加

t(text):文本文件,可省略不寫

b(banary):二進制文件

+:讀和寫

2) 凡用“r”打開一個文件時,該文件必須已經(jīng)存在,且只能從該文件讀出。

3) 用“w”打開的文件只能向該文件寫入。若打開的文件不存在,則以指定的文件名建立該文件,若打開的文件已經(jīng)存在,則將該文件刪去,重建一個新文件。

4) 若要向一個已存在的文件追加新的信息,只能用“a”方式打開文件。但此時該文件必須是存在的,否則將會出錯。

5) 在打開一個文件時,如果出錯,fopen將返回一個空指針值NULL。在程序中可以用這一信息來判別是否完成打開文件的工作,并作相應的處理。因此常用以下程序段打開文件:

if((fp=fopen("c:\\hzk16","rb")==NULL){

printf("\nerror on open c:\\hzk16 file!");

getch();

exit(1);

}

這段程序的意義是,如果返回的指針為空,表示不能打開C盤根目錄下的hzk16文件,則給出提示信息“error on open c:\ hzk16 file!”,下一行g(shù)etch()的功能是從鍵盤輸入一個字符,但不在屏幕上顯示。在這里,該行的作用是等待,只有當用戶從鍵盤敲任一鍵時,程序才繼續(xù)執(zhí)行,因此用戶可利用這個等待時間閱讀出錯提示。敲鍵后執(zhí)行exit(1)退出程序。

6) 把一個文本文件讀入內(nèi)存時,要將ASCII碼轉(zhuǎn)換成二進制碼,而把文件以文本方式寫入磁盤時,也要把二進制碼轉(zhuǎn)換成ASCII碼,因此文本文件的讀寫要花費較多的轉(zhuǎn)換時間。對二進制文件的讀寫不存在這種轉(zhuǎn)換。

7) 標準輸入文件(鍵盤),標準輸出文件(顯示器),標準出錯輸出(出錯信息)是由系統(tǒng)打開的,可直接使用。

文件關(guān)閉函數(shù)(fclose函數(shù))

文件一旦使用完畢,應用關(guān)閉文件函數(shù)把文件關(guān)閉,以避免文件的數(shù)據(jù)丟失等錯誤。

fclose函數(shù)調(diào)用的一般形式是:

fclose(文件指針);

例如:

fclose(fp);

正常完成關(guān)閉文件操作時,fclose函數(shù)返回值為0。如返回非零值則表示有錯誤發(fā)生。

c語言中文件的打開和關(guān)閉使用什么函數(shù)

c語言的fopen函數(shù)編譯鏈接后會將代碼整合到exe文件中

api的函數(shù)編譯鏈接后只是將函數(shù)調(diào)用信息寫入,程序運行時動態(tài)鏈接

應該是這樣

c 語言中打開文件的函數(shù)名為

C語言open()函數(shù):打開文件函數(shù)

相關(guān)函數(shù):read, write, fcntl, close, link,stat, umask, unlink, fopen

頭文件:#include sys/types.h #includesys/stat.h #include fcntl.h

定義函數(shù):

intopen(const char * pathname, int flags);

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

函數(shù)說明:

參數(shù) pathname 指向欲打開的文件路徑字符串. 下列是參數(shù)flags 所能使用的旗標:

O_RDONLY 以只讀方式打開文件

O_WRONLY 以只寫方式打開文件

O_RDWR 以可讀寫方式打開文件. 上述三種旗標是互斥的, 也就是不可同時使用, 但可與下列的旗標利用OR(|)運算符組合.

O_CREAT 若欲打開的文件不存在則自動建立該文件.

O_EXCL 如果O_CREAT 也被設置, 此指令會去檢查文件是否存在. 文件若不存在則建立該文件, 否則將導致打開文件錯誤. 此外, 若O_CREAT 與O_EXCL 同時設置, 并且欲打開的文件為符號連接, 則會打開文件失敗.

O_NOCTTY 如果欲打開的文件為終端機設備時, 則不會將該終端機當成進程控制終端機.

O_TRUNC 若文件存在并且以可寫的方式打開時, 此旗標會令文件長度清為0, 而原來存于該文件的資料也會消失.

O_APPEND 當讀寫文件時會從文件尾開始移動, 也就是所寫入的數(shù)據(jù)會以附加的方式加入到文件后面.

O_NONBLOCK 以不可阻斷的方式打開文件, 也就是無論有無數(shù)據(jù)讀取或等待, 都會立即返回進程之中.

O_NDELAY 同O_NONBLOCK.

O_SYNC 以同步的方式打開文件.

O_NOFOLLOW 如果參數(shù)pathname 所指的文件為一符號連接, 則會令打開文件失敗.

O_DIRECTORY 如果參數(shù)pathname 所指的文件并非為一目錄, 則會令打開文件失敗。注:此為Linux2. 2 以后特有的旗標, 以避免一些系統(tǒng)安全問題.

參數(shù)mode 則有下列數(shù)種組合, 只有在建立新文件時才會生效, 此外真正建文件時的權(quán)限會受到umask 值所影響, 因此該文件權(quán)限應該為 (mode-umaks).

S_IRWXU00700權(quán)限, 代表該文件所有者具有可讀、可寫及可執(zhí)行的權(quán)限.

S_IRUSR或S_IREAD, 00400 權(quán)限,代表該文件所有者具有可讀取的權(quán)限.

S_IWUSR或S_IWRITE, 00200 權(quán)限, 代表該文件所有者具有可寫入的權(quán)限.

S_IXUSR或S_IEXEC, 00100 權(quán)限,代表該文件所有者具有可執(zhí)行的權(quán)限.

S_IRWXG00070 權(quán)限, 代表該文件用戶組具有可讀、可寫及可執(zhí)行的權(quán)限.

S_IRGRP00040 權(quán)限, 代表該文件用戶組具有可讀的權(quán)限.

S_IWGRP00020 權(quán)限, 代表該文件用戶組具有可寫入的權(quán)限.

S_IXGRP00010 權(quán)限, 代表該文件用戶組具有可執(zhí)行的權(quán)限.

S_IRWXO00007 權(quán)限, 代表其他用戶具有可讀、可寫及可執(zhí)行的權(quán)限.

S_IROTH00004 權(quán)限, 代表其他用戶具有可讀的權(quán)限

S_IWOTH00002 權(quán)限, 代表其他用戶具有可寫入的權(quán)限.

S_IXOTH00001 權(quán)限, 代表其他用戶具有可執(zhí)行的權(quán)限.

返回值:若所有欲核查的權(quán)限都通過了檢查則返回0 值, 表示成功, 只要有一個權(quán)限被禁止則返回-1.

錯誤代碼:

EEXIST參數(shù)pathname 所指的文件已存在, 卻使用了O_CREAT 和O_EXCL旗標.

EACCESS參數(shù)pathname 所指的文件不符合所要求測試的權(quán)限.

EROFS 欲測試寫入權(quán)限的文件存在于只讀文件系統(tǒng)內(nèi).

EFAULT參數(shù)pathname 指針超出可存取內(nèi)存空間.

EINVAL參數(shù)mode 不正確.

ENAMETOOLONG參數(shù) pathname 太長.

ENOTDIR參數(shù)pathname 不是目錄.

ENOMEM核心內(nèi)存不足.

ELOOP 參數(shù)pathname 有過多符號連接問題.

EIOI/O 存取錯誤.

附加說明:使用access()作用戶認證方面的判斷要特別小心, 例如在access()后再作open()空文件可能會造成系統(tǒng)安全上的問題.

范例

#includeunistd.h

#includesys/types.h

#includesys/stat.h

#includefcntl.h

main()

{

intfd, size;

chars[] = "Linux Programmer!\n", buffer[80];

fd =open("/tmp/temp", O_WRONLY|O_CREAT);

write(fd, s, sizeof(s));

close(fd);

fd =open("/tmp/temp", O_RDONLY);

size= read(fd, buffer, sizeof(buffer));

close(fd);

printf("%s", buffer);

}

執(zhí)行

LinuxProgrammer!

分享題目:c語言文件打開關(guān)閉函數(shù)名 c語言如何打開關(guān)閉文件
當前地址:http://muchs.cn/article4/doshgie.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供微信小程序定制網(wǎng)站、關(guān)鍵詞優(yōu)化云服務器、定制開發(fā)網(wǎng)站改版

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設公司