fread 和 read函式的區別

2021-08-25 20:18:20 字數 774 閱讀 6345

**

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做真正的寫入檔案系統工作),但是這其中的差別無所謂。

read與fread的區別

與 fread 的區別的誤解 rel noopener noreferrer read 與 fread 的區別的誤解 刻卜浪興 前多時間梳理了一些linux上的程式設計,其實就是認識的大量的系統呼叫 posix 這裡有乙個我們經常提出的問題就是fread,read的區別。當然這兩個分別代表了操作檔案...

read和fread的區別與使用

函式原型 ssize t read int fd void buf,size t count read用於從檔案描述符對應的檔案讀取資料,呼叫成功返回讀出的位元組數 buf為讀出資料的緩衝區,count為每次讀取的位元組數,出錯返回 1,結束返回0。函式原型 size t fread void pt...

read 與 fread 的區別的誤解

前多時間梳理了一些linux上的程式設計,其實就是認識的大量的系統呼叫 posix 這裡有乙個我們經常提出的問題就是fread,read的區別。當然這兩個分別代表了操作檔案系統的兩套不同的函式,包括open,read,write,seek 等 我們都知道,他們的區別就是乙個 read 是unix 中...