天天看點

read()和fread()的差別--執行個體分析

當我們在linux系統下寫程式的時候,經常會讀檔案或者寫檔案,既然要操作檔案,就會用檔案操作函數,其中涉及讀寫的不乏有read/write或者fread/fwrite,但是我們應該選擇哪一種呢,少安毋躁,在決定選用哪一種之前,先讓我們看看它們有哪些不同點,然後再做決定,你說呢?

<b>一、  </b><b>fread</b><b>和read的不同點</b>

1)

read/write  操作檔案描述符 (int型)

fread/fwrite 操作檔案流   (FILE*型)

2)

fread/fwrite 調用 read/write

read/write是系統調用,要自己配置設定緩存,也就是說效率要自己根據實際情況來控制。

fread/fwrite是标準輸入/輸出函數,不需要自己配置設定緩存,對于一般情況具有較高的效率。

二、   <b>執行個體分析:</b>

2.1  待測檔案,大小是8K,如圖1 。

read()和fread()的差別--執行個體分析

                                                     圖1

2.2   用read讀取待測檔案test.txt

通過分析計算,如果用read讀待測檔案,且隻配置設定2K的緩存,則要将此檔案讀出需要做4次系統調用來實際從磁盤上讀出。

好的,接下來我們通過執行個體來驗證,驗證程式代碼如圖2

read()和fread()的差別--執行個體分析

                                                       圖2

編譯運作,通過結果驗證,如圖3、圖4、圖5、圖6

read()和fread()的差別--執行個體分析

                                                                                              圖3

read()和fread()的差別--執行個體分析

                                                                                    圖4

read()和fread()的差別--執行個體分析

                                                                                   圖5

read()和fread()的差別--執行個體分析

                                                                                 圖6

             說明:上面的輸出結果,是預先在驗證程式裡寫好的。

 用strace指令跟蹤驗證如下:

read()和fread()的差別--執行個體分析

                                       圖7

read()和fread()的差別--執行個體分析

                                            圖8

read()和fread()的差別--執行個體分析

                                             圖9

read()和fread()的差別--執行個體分析

                                            圖10

2.3   用fread讀取待測檔案test.txt

      如果用fread/fwrite,則系統自動配置設定緩存(一般大于8K),則讀出此檔案隻要一次系統調用從磁盤上讀出。也就是用read/write要讀4次磁盤,而用fread/fwrite則隻要讀1次磁盤。效率比read/write要高4倍。如果程式對記憶體有限制,則用read/write比較好。

驗證程式代碼如圖11

read()和fread()的差別--執行個體分析

                                                                   圖11

編譯運作結果如圖12,驗證結果

read()和fread()的差別--執行個體分析

                                                                  圖12

用strace指令跟蹤驗證如圖13

read()和fread()的差別--執行個體分析

                                                                                      圖13

以上即為今天對這兩種讀檔案方式的執行個體分析,接下來我會繼續做寫檔案的分析。

繼續閱讀