fread函數和read函數的區別

1,fread是帶緩衝的,read不帶緩衝. 

2,fopen是標準c裏定義的,open是POSIX中定義的. 

3,fread可以讀一個結構.read在linux/unix中讀二進制與普通文件沒有區別. 

4,fopen不能指定要創建文件的權限.open可以指定權限. 

5,fopen返回指針,open返回文件描述符(整數). 

6,linux/unix中任何設備都是文件,都可以用open,read.

如果文件的大小是8k。

你如果用read/write,且只分配了2k的緩存,則要將此文件讀出需要做4次系統調用來實際從磁盤上讀出。

如果你用fread/fwrite,則系統自動分配緩存,則讀出此文件只要一次系統調用從磁盤上讀出。

也就是用read/write要讀4次磁盤,而用fread/fwrite則只要讀1次磁盤。效率比read/write要高4倍。

如果程序對內存有限制,則用read/write比較好。

都用fread 和fwrite,它自動分配緩存,速度會很快,比自己來做要簡單。如果要處理一些特殊的描述符,用read 和write,如套接口,管道之類的

系統調用write的效率取決於你buf的大小和你要寫入的總數量,如果buf太小,你進入內核空間的次數大增,效率就低下。而fwrite會替你做緩存,減少了實際出現的系統調用,所以效率比較高。

如果只調用一次(可能嗎?),這倆差不多,嚴格來說write要快一點點(因爲實際上fwrite最後還是用了write做真正的寫入文件系統工作),但是這其中的差別無所謂。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章