linux 中 open和fopen的區別

open和fopen的區別:
主要區別是涉及到系統,而不是緩衝。帶f的是標準IO,代碼可以移植。

不帶f只能在UNIX/LINUX系統調用。 open一個是整數,fopen一個是指針(FILE *)。 二者區別大致可以總結爲以下幾點:
1,fread是帶緩衝的,read不帶緩衝.
2,fopen是標準c裏定義的,open是POSIX中定義的.
3,fread可以讀一個結構.read在linux/unix中讀二進制與普通文件沒有區別.
4,fopen不能指定要創建文件的權限.open可以指定權限.
5,fopen返回指針,open返回文件描述符(整數).
6,linux/unix中任何設備都是文件,都可以用open,read.

1.非緩衝文件系統
緩衝文件系統是藉助文件結構體指針來對文件進行管理,通過文件指針來對文件進行訪問,

既可以讀寫字符、字符串、格式化數據,也可以讀寫二進制數據。非緩衝 文件系統依賴於操作系統,

通過操作系統的功能對文件進行讀寫,是系統級的輸入輸出,它不設文件結構體指針,

只能讀寫二進制文件,但效率高、速度快,由於 ANSI標準不再包括非緩衝文件系統,因此建議大家最好不要選擇它。
open, close, read, write, getc, getchar, putc, putchar 等
2.緩衝文件系統
緩衝文件系統的特點是:在內存開闢一個“緩衝區”,爲程序中的每一個文件使用,

當執行讀文件的操作時,從磁盤文件將數據先讀入內存“緩衝區”,

裝滿後再從 內存“緩衝區”依此讀入接收的變量。執行寫文件的操作時,

先將數據寫入內存“緩衝區”,待內存“緩衝區”裝滿後再寫入文件。

由此可以看出,內存 “緩衝區”的大小,影響着實際操作外存的次數,

內存“緩衝區”越大,則操作外存的次數就少,執行速度就快、效率高。

一般來說,文件“緩衝區”的大小隨機器 而定。
fopen, fclose, fread, fwrite, fgetc, fgets, fputc, fputs, freopen, fseek, ftell, rewind等

前者屬於低級IO,後者是高級IO。
前者返回一個文件描述符(用戶程序區的),後者返回一個文件指針。
前者無緩衝,後者有緩衝。
前者與 read, write 等配合使用, 後者與 fread, fwrite等配合使用。
後者是在前者的基礎上擴充而來的,在大多數情況下,用後者。
http://blog.chinaunix.net/u/21067/showart_213410.html
open 是Linux/Unix系統調用 返回的是文件句柄,文件的句柄是文件在文件描述副表裏的索引,

fopen是C的庫函數,返回的是一個指向文件結構的指針。

fopen是ANSIC標準中的C語言庫函數,在不同的系統中應該調用不同的內核api
linux中的系統函數是open,fopen是其封裝函數。
fopen最終還是要調用底層的系統調用open。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章