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。
前者返回一個文件描述符(用戶程序區的),後者返回一個文件指針。
前者無緩衝,後者有緩衝。
前者與 read, write 等配合使用, 後者與 fread, fwrite等配合使用。
後者是在前者的基礎上擴充而來的,在大多數情況下,用後者。

發佈了31 篇原創文章 · 獲贊 7 · 訪問量 20萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章