天天看點

open和fopen的差別 open和fopen的差別:

1.緩沖檔案系統

緩沖檔案系統的特點是:在記憶體開辟一個“緩沖區”,為程式中的每一個檔案使用,當執行讀檔案的操作時,從磁盤檔案将資料先讀入記憶體“緩沖區”, 裝滿後再從記憶體“緩沖區”依此讀入接收的變量。執行寫檔案的操作時,先将資料寫入記憶體“緩沖區”,待記憶體“緩沖區”裝滿後再寫入檔案。由此可以看出,記憶體 “緩沖區”的大小,影響着實際操作外存的次數,記憶體“緩沖區”越大,則操作外存的次數就少,執行速度就快、效率高。一般來說,檔案“緩沖區”的大小随機器 而定。

fopen, fclose, fread, fwrite, fgetc, fgets, fputc, fputs, freopen, fseek, ftell, rewind等

2.非緩沖檔案系統

緩沖檔案系統是借助檔案結構體指針來對檔案進行管理,通過檔案指針來對檔案進行通路,既可以讀寫字元、字元串、格式化資料,也可以讀寫二進制數 據。非緩沖檔案系統依賴于作業系統,通過作業系統的功能對檔案進行讀寫,是系統級的輸入輸出,它不設檔案結構體指針,隻能讀寫二進制檔案,但效率高、速度 快,由于ANSI标準不再包括非緩沖檔案系統,是以建議大家最好不要選擇它。本書隻作簡單介紹。open, close, read, write, getc, getchar, putc, putchar 等。

open 是系統調用 傳回的是檔案句柄,檔案的句柄是檔案在檔案描述副表裡的索引,fopen是C的庫函數,傳回的是一個指向檔案結構的指針。

fopen是ANSIC标準中的C語言庫函數,在不同的系統中應該調用不同的核心api 

linux中的系統函數是open,fopen是其封裝函數,個人觀點。僅供參考。

檔案描述符是linux下的一個概念,linux下的一切裝置都是以檔案的形式操作.如網絡套接字、硬體裝置等。當然包括操作檔案。

fopen是标準c函數。傳回檔案流而不是linux下檔案句柄。

裝置檔案不可以當成流式檔案來用,隻能用open

fopen是用來操縱正規檔案的,并且設有緩沖的,跟open還是有一些差別

一般用fopen打開普通檔案,用open打開裝置檔案

fopen是标準c裡的,而open是linux的系統調用.

他們的層次不同.

fopen可移植,open不能

我認為fopen和open最主要的差別是fopen在使用者态下就有了緩存,在進行read和write的時候減少了使用者态和核心态的切換,而open則每次都需要進行核心态和使用者态的切換;表現為,如果順序通路檔案,fopen系列的函數要比直接調用open系列快;如果随機通路檔案open要比fopen快。

來自論壇的經典回答:

前者屬于低級IO,後者是進階IO。

前者傳回一個檔案描述符(使用者程式區的)int,後者傳回一個檔案指針FILE*。

前者無緩沖,後者有緩沖。

前者與 read, write 等配合使用, 後者與 fread, fwrite等配合使用。

後者是在前者的基礎上擴充而來的,在大多數情況下,用後者。

繼續閱讀