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