C語言:標准IO_fopen( )、fclose() ①


思前想后一個月,我終於敲下了我的第一篇開山之作。

博客千千萬,我的博客首先記錄的是學習時候的理解,用於給自己翻閱查找,現在主要研究的是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為一個結構體 但是這個結構體太復雜,暫時不需要弄清楚。

 

 

 函數詳解:

參數1const 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函數及其相關代碼例子。敬請期待!

 

 

 

 

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM