轉:文件系統read,write緩存,有點意思

當咱們在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

以上即爲今天對這兩種讀文件方式的實例分析,接下來我會繼續作寫文件的分析。

相關文章
相關標籤/搜索