转:文件系统read,write缓存,有点意思
2019獨角獸企業重金招聘Python工程師標準>>>
當我們在linux系統下寫程序的時候,經常會讀文件或者寫文件,既然要操作文件,就會用文件操作函數,其中涉及讀寫的不乏有read/write或者fread/fwrite,但是我們應該選擇哪一種呢,少安毋躁,在決定選用哪一種之前,先讓我們看看它們有哪些不同點,然后再做決定,你說呢?
一、??fread和read的不同點
1)
read/write??操作文件描述符?(int型)
fread/fwrite?操作文件流???(FILE*型)
2)
fread/fwrite?調用?read/write
read/write是系統調用,要自己分配緩存,也就是說效率要自己根據實際情況來控制。
fread/fwrite是標準輸入/輸出函數,不需要自己分配緩存,對于一般情況具有較高的效率。
?
?
二、???實例分析:
2.1??待測文件,大小是8K,如圖1?。
?????????????????????
???????????????????????????????????????????????????? 圖1
說明:待測文件可以用shell腳本分享自動生成,或者手動編輯一個,最好是嘗試用前者。
?
2.2???用read讀取待測文件test.txt
通過分析計算,如果用read讀待測文件,且只分配2K的緩存,則要將此文件讀出需要做4次系統調用來實際從磁盤上讀出。
好的,接下來我們通過實例來驗證,驗證程序代碼如圖2
?????????????????????????????????????????????????????????????????????????????? 圖2
編譯運行,通過結果驗證,如圖3、圖4、圖5、圖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
以上即為今天對這兩種讀文件方式的實例分析,接下來我會繼續做寫文件的分析。
轉載于:https://my.oschina.net/linjiezang/blog/2885480
總結
以上是生活随笔為你收集整理的转:文件系统read,write缓存,有点意思的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux网络_防火墙-iptables
- 下一篇: Web安全开发手册