當咱們在linux系統下寫程序的時候,常常會讀文件或者寫文件,既然要操做文件,就會用文件操做函數,其中涉及讀寫的不乏有read/write或者fread/fwrite,可是咱們應該選擇哪種呢,少安毋躁,在決定選用哪種以前,先讓咱們看看它們有哪些不一樣點,而後再作決定,你說呢?linux
1、 fread和read的不一樣點shell
1)緩存
read/write 操做文件描述符 (int型)
fread/fwrite 操做文件流 (FILE*型)函數
2)
fread/fwrite 調用 read/write
read/write是系統調用,要本身分配緩存,也就是說效率要本身根據實際狀況來控制。
fread/fwrite是標準輸入/輸出函數,不須要本身分配緩存,對於通常狀況具備較高的效率。blog
2、 實例分析:
2.1 待測文件,大小是8K,如圖1 。
圖1內存
說明:待測文件能夠用shell腳本分享自動生成,或者手動編輯一個,最好是嘗試用前者。it
2.2 用read讀取待測文件test.txt編譯
經過分析計算,若是用read讀待測文件,且只分配2K的緩存,則要將此文件讀出須要作4次系統調用來實際從磁盤上讀出。test
好的,接下來咱們經過實例來驗證,驗證程序代碼如圖2
圖2效率
編譯運行,經過結果驗證,如圖三、圖四、圖五、圖6
圖3
圖4
圖5
圖6
說明:上面的輸出結果,是預先在驗證程序裏寫好的。
用strace命令跟蹤驗證以下:
圖7
圖8
圖9
圖10
2.3 用fread讀取待測文件test.txt
若是用fread/fwrite,則系統自動分配緩存(通常大於8K),則讀出此文件只要一次系統調用從磁盤上讀出。也就是用read/write要讀4次磁盤,而用fread/fwrite則只要讀1次磁盤。效率比read/write要高4倍。若是程序對內存有限制,則用read/write比較好。
驗證程序代碼如圖11
圖11
編譯運行結果如圖12,驗證結果
圖12
用strace命令跟蹤驗證如圖13
圖13
以上即爲今天對這兩種讀文件方式的實例分析,接下來我會繼續作寫文件的分析。