fopen與open的區別

open和fopen的區別:linux

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的庫函數,返回的是一個指向文件結構的指針。api

fopen是ANSIC標準中的C語言庫函數,在不一樣的系統中應該調用不一樣的內核api
linux中的系統函數是open,fopen是其封裝函數,我的觀點。僅供參考。
緩存

文件描述符是linux下的一個概念,linux下的一切設備都是以文件的形式操做.如網絡套接字、硬件設備等。固然包括操做文件。
fopen是標準c函數。返回文件流而不是linux下文件句柄。網絡

設備文件不能夠當成流式文件來用,只能用open
fopen是用來操縱正規文件的,而且設有緩衝的,跟open仍是有一些區別函數

通常用fopen打開普通文件,用open打開設備文件spa

fopen是標準c裏的,而open是linux的系統調用.
他們的層次不一樣.
fopen可移植,open不能操作系統

我認爲fopen和open最主要的區別是fopen在用戶態下就有了緩存,在進行 read和write的時候減小了用戶態和內核態的切換,而open則每次都須要進行內核態和用戶態的切換;表現爲,若是順序訪問文件,fopen系列的 函數要比直接調用open系列快;若是隨機訪問文件open要比fopen快。指針

來自論壇的經典回答:orm

前者屬於低級IO,後者是高級IO。
前者返回一個文件描述符(用戶程序區的),後者返回一個文件指針。
前者無緩衝,後者有緩衝。
前者與 read, write 等配合使用, 後者與 fread, fwrite等配合使用。
後者是在前者的基礎上擴充而來的,在大多數狀況下,用後者。索引

相關文章
相關標籤/搜索