思前想後一個月,我終于敲下了我的第一篇開山之作。
部落格千千萬,我的部落格首先記錄的是學習時候的了解,用于給自己翻閱查找,現在主要研究的是C語言和STM32。如果能幫到你,那是最好的,假如我寫的東西有錯誤歡迎指正,是以請反複對比,僅作參考。其次,這裡不僅記錄學習,也會寫下我在朋友圈不能公開的想法和秘密!
馬上進入主題
一、什麼是檔案?
我相信,就算接觸過C語言的檔案輸入輸出的人,還會回答:檔案不就是滑鼠點選的東西嘛!其實不全對,因為在C語言程式中,檔案有着更廣泛的定義:檔案通常是在磁盤或硬碟上的已命名的儲存區。
要看到是通常,那麼就說明會有不尋常的。對于C程式來說,裝置也可以看成是檔案!例如螢幕和鍵盤。看到這裡的朋友會有一個疑問:那麼C程式和語言有什麼關系呢?檔案對C程式有什麼重要性呢?
簡單地了解,檔案能夠輸入一些必要的資料給程式使用以及程式輸出資料到檔案儲存。
1.1 檔案的兩種形式
在C程式看來,檔案隻有兩種形式。
- 文本檔案
- 二進制檔案
文本檔案即裡面的資料都是字元。 字元傳化成對應的ASCII碼存放在記憶體中。如“ABC”就分别是‘A’、'B'、'C'存放
二進制檔案即裡面的資料直接存放在記憶體中。無需轉換為ASCII碼,可以了解為機器語言(隻有0和1)。例如整數1000轉換為二進制為0010 0111 0001 0000,直接存儲在記憶體中。
二、利用标準IO操作檔案
2.1 标準IO(standard high-level I/0)是什麼
标準IOANSI C建立的标準函數包和stdio.h頭檔案中的定義。通俗的來講就是一些操作IO的庫函數,至于是怎麼實作的我也不知道。今天我們來講三個函數:fopen(), fclose().
分别對應着打開檔案、關閉檔案兩個功能。
其次,與标準IO對應着的還有檔案IO或者叫底層IO(low-level I/O)。暫時不需要關心。
2.2 标準檔案
一開始提到,一些裝置都被C程式看做是檔案。是以C語言定義了三個标準檔案:标準輸入(standard input)、标準輸出(standard output)、标準錯誤輸出(standard error output).
分别對應着鍵盤、螢幕、螢幕。但是,标準錯誤輸出強制性輸出到螢幕(即使重定向到其他檔案啦顯示錯誤資訊)。看到這裡看不懂沒關系,我們結合下面的函數講解就懂了。
标準檔案 | 檔案指針 | 通常使用的裝置 |
标準輸入 | stdin | 鍵盤 |
标準輸出 | stdout | 顯示器 |
标準錯誤輸出 | stderr | 顯示器 |
檔案指針是即将要講到函數裡面的C語言裡一個特殊的指針。
三、 fopen()
函數介紹:
打開或建立一個檔案并且傳回一個檔案指針。
函數原型:
FILE *fopen(const char *path, const char *mode);
FILE為一個結構體 但是這個結構體太複雜,暫時不需要弄清楚。
函數詳解:
參數1:const char *path ,這是一個指針,char表明指向的是一個字元串,const表明不能通過path指針變量去修改這個字元串。
這個字元串指定了你要準備打開或建立的檔案路徑和名稱,例如“我好餓啊.txt”
參數2:設定打開的模式。可輸入的參數有如下:
模式 | 含義 |
“r” | 隻能讀 |
“w” | 隻能寫,無此檔案則建立,有此檔案則清空 |
“a” | 隻能寫,會在原來的檔案後面添加内容。無此檔案則建立檔案 |
“r+” | 讀寫檔案 |
“w+” | 讀寫檔案,無此檔案則建立,有此檔案則清空 |
“a+” | 讀寫檔案,會在原來的檔案後面添加内容。無此檔案則建立檔案 |
上述打開的都是文本本件
此外還有"rb", "wb", "ab", "r+b", "w+b", "a+b",此時打開二進制檔案。
path 參數可以是相對路徑(../fishc.txt)也可以是絕對路徑(/home/FishC/fishc.txt),如果隻給出檔案名而不包含路徑,則表示該檔案在目前檔案夾中
傳回值:
1. 如果檔案打開成功,則傳回一個指向 FILE 結構的檔案指針;
2. 如果檔案打開失敗,則傳回 NULL 并設定 errno 為指定的錯誤。
舉例子:
FILE *fp; //定義一個檔案指針
fp=fopen("c語言資料.txt","r") //以隻讀的方式打開文本檔案,并傳回一個文本指針給fp
然後我們接下來就可以通過fp去操作檔案,至于怎麼實作不用管。可以了解為fp現在就指向了一個實際的txt檔案。
而且,我們可以用過改變第二個參數感受一下他們之間的差別。
四、fclose()
函數介紹:
關閉檔案先前用fopen()打開的檔案
關閉後會把緩沖區的資料送到程式或者檔案(要看先前對檔案的操作是讀取檔案資料還是輸出資料到檔案)
函數原型:
int fclose(FILE *fp);
函數詳解:
參數:是一個檔案指針,指向要關閉的檔案。例如先前通過fopen()把建立的檔案給了fp,現在fp則代表着這個檔案,操作fp即可關閉檔案。
傳回值:
1. 如果檔案關閉成功,傳回值是 0;
2. 如果檔案關閉失敗,傳回值是 EOF,并設定 errno 為指定的錯誤。
記得操作完檔案之後要用fclose(),因為調用了fclose函數才能把緩沖區的資料送到指定的地方。fopen和fclose最好同時使用。
接下來我還會繼續講我對緩沖區和流的了解哦,以及fflush函數及其相關代碼例子。敬請期待!
轉載于:https://www.cnblogs.com/justice-fly/p/11421080.html