程振
?
“文件”的趣味學(xué)習(xí)法探究
程振
摘要:在學(xué)習(xí)計算機C語言的過程中,經(jīng)常會使用到C語言中的讀寫文件,在C語言中,眾多文件在操作的過程中都是通過庫函數(shù)來實現(xiàn)的,這里的庫函數(shù)主要分為讀和寫兩種操作。但是,用函數(shù)來操作“文件”可能會略顯枯燥,所以,在學(xué)習(xí)C語言的過程中,應(yīng)當掌握趣味學(xué)習(xí)“文件”,各種函數(shù)在趣味的性質(zhì)下也顯得不再乏味。本文對一些有關(guān)文件操作的函數(shù)使用及對比做出了一定闡述。
關(guān)鍵詞:趣味;C語言;文件
C語言中所有文件操作函數(shù)主要有fopen、fwrite、fread、fgetc、fputc、fscanf、fprintf、ftell、fseek等,雖然看上去略顯復(fù)雜,但只有充滿學(xué)習(xí)的動力就能將其很好的掌握,下面我們就來趣味解讀以下這些函數(shù)。
上述的幾種函數(shù)基本上都是流式的文件操作,流式文件中構(gòu)成文件的最基本的單位是字符,流式文件也就是有序字符的集合,它的長度正是這個文件中所有的字符的個數(shù),所以,流式文件又叫做字符流文件。流式文件沒有具體的結(jié)構(gòu),并且管理起來也比較簡單,下面我們就介紹幾個流式文件:
1.fopen(打開文件)與該打開文件fopen相關(guān)的函數(shù)就是open,fclose,它的表頭文件是#include
2.fread和fwrite函數(shù)。這兩個函數(shù)可以對數(shù)據(jù)進行塊的操作,fread函數(shù)的一般調(diào)用形式是(buffer,size,count,fp);而fwrite函數(shù)的一般調(diào)用形式是(buffer,size,count,fp)。下面我們就對這兩個調(diào)用形式里的調(diào)用因素進行解釋說明:
(1)buffer。Buffer是指針的意思,在fread函數(shù)中,buffer是它在載入數(shù)據(jù)的時候能夠存放數(shù)據(jù)的地方,然而對于fwrite來講,則只是輸出數(shù)據(jù)的地址。(2)size。它所代表的是應(yīng)當讀寫的字節(jié)數(shù)目。
(3)count。這是相對于size而言的,應(yīng)當讀寫多少個size字節(jié)的數(shù)據(jù)項。
(4)fp。意義很簡單,記住,它是文件型指針。
在C語言中,還相應(yīng)提供了一整塊數(shù)據(jù)的讀寫函數(shù),也就是可以用來讀寫出一整組的數(shù)據(jù)。比如一個數(shù)組元素和一個結(jié)構(gòu)變量的值等。再例如fread(fa,4,5,fp);它所表達的意思是從fp所代表的文件中,每一次讀取4個字節(jié)送入到fa實數(shù)組中去,并連續(xù)讀取5次,也就是這5個實數(shù)都被讀取到fa中。
3.fgetc和fputc。這兩個函數(shù)是字符讀寫函數(shù),fgetc函數(shù)(getc函數(shù))的一般調(diào)用形式是ch=fgetc(fp),它們的用途可謂是十分重要,因為我們操作文件的主要目的就是為了讀取文件,它的作用就是從指定的文件中讀入一個字符,也就是從fp所指的文件中能夠讀出一個字符并賦給ch;在返回值的過程中,如果成功的話就能夠返回到所得到的字符上去,如果失敗的話則返回EOF(-1)。fputc函數(shù)的一般調(diào)用形式是fputc(ch,fp);它的作用不同于fgetc函數(shù),它的作用是將一個字符寫到磁盤上的文件中去,也就是能夠?qū)⑦@其中的ch輸出到fp所指的文件中去;在返回值方面,如果成功的話就輸出相應(yīng)的字符,如果失敗的話就返回EOF(-1)。上述函數(shù)就是我所選取的流式文件中的幾種,下面我們來對直接I/O文件操作進行一些闡述。
直接I/O文件操作是C語言中的另一種文件的操作模式,它和流式文件有很大的不同,它是通過直接存取文件來完成對文件的處理的,然而我們上述的流式文件操作則是通過緩沖區(qū)的特征來進行的。下面,我們就對直接I/O文件操作中的一些函數(shù)進行闡述,找一找它與流式文件的相同點和不同點:
1.open函數(shù)。在打開文件的同時讓它返回到相應(yīng)的句柄中,假如失敗的話,隨后就要返回小于零的數(shù)值,它的原型是int open(const char *path,int access[,unsigned mode]);這里面所涉及到的參數(shù)path就是將要打開的一個文件名,access就是其中所要打開的模式,mode是可選擇的項目。該函數(shù)主要用于表示文件的屬性是什么,在UNIX系統(tǒng)中比較常用,但是在DOS/WINDOWS這個參數(shù)中也并沒有什么具體的意義。例如,int handle=open(“c:msdos.sys”,O_BINARY|O_CREAT|O_ WRITE)。
2.close函數(shù)。看到英文,想必大家都很熟悉,是“關(guān)閉”的意思,該函數(shù)代表關(guān)閉一個句柄,它的原型是int close(int handle)。假如在返回的過程中成功,就把相應(yīng)的數(shù)值返回到0.比如:close(handle)。
3.Iseek函數(shù)。這個函數(shù)所代表的意思就是將文件定位到指定的位置,它的原型是long lseek(int handle,long offset,int fromwhere);其中的參數(shù)offset是移動的量的多少,fromwhere則是移動的位置變化是怎么樣的,在這個函數(shù)中要注意SEEK_CUR代表文件當前的位置,SEEK_END代表文件的末尾。舉一個簡單的例子:lseek(handle,-1234L,SEEK_CUR);//它的意思就是將存取的位置從現(xiàn)在的位置向前面移動1234個字節(jié)。x=lseek(hnd1,0L,SEEK_END);//的意思是將存取的位置移動到文件的最尾端,這里的x=文件尾的位置就是文件的長度。
如果在學(xué)習(xí)C語言文件操作過程中很熟悉匯編過程的話會發(fā)現(xiàn)文件操作形式萬變不離其宗,直接I/O文件操作和流式文件的操作大體相同,也提供了相應(yīng)的Unicode字符操作函數(shù),比如_wopen等。這些操作中BCB可以幫助我們很多操作。C語言中的編程是計算機中相對比較復(fù)雜的東西,很多初學(xué)者也因此而很頭痛,但是只要找到這其中的奧妙,就會找到文件操作的趣味性。任何學(xué)習(xí)都需要興趣指引。
參考文獻:
[1]張荷花.ATLAS常規(guī)語言部分到C語言的轉(zhuǎn)換[D].吉林大學(xué).2004.
[2]劉沖.張瑋瑋.C語言中文件操作中讀寫數(shù)據(jù)函數(shù)的應(yīng)用[J].黑龍江科技信息.2015,20:163-164
[3]李躍.嵌入式實時操作系統(tǒng)設(shè)計方法研究[D].西南交通大學(xué).2006.
(作者單位:江蘇省宿城中等專業(yè)學(xué)校)