fopen與open的區別(好文)
阿新 • • 發佈:2019-01-29
- int open(constchar *path, int access,int mode)
- path 要開啟的檔案路徑和名稱
- access 訪問模式,巨集定義和含義如下:
- O_RDONLY 1 只讀開啟
- O_WRONLY 2 只寫開啟
- O_RDWR 4 讀寫開啟
- 還可選擇以下模式與以上3種基本模式相與:
- O_CREAT 0x0100 建立一個檔案並開啟
- O_TRUNC 0x0200 開啟一個已存在的檔案並將檔案長度設定為0,其他屬性保持
- O_EXCL 0x0400 未使用
- O_APPEND 0x0800 追加開啟檔案
- O_TEXT 0x4000 開啟文字檔案翻譯CR-LF控制字元
- O_BINARY 0x8000 開啟二進位制字元,不作CR-LF翻譯
- mode 該引數僅在access=O_CREAT方式下使用,其取值如下:
- S_IFMT 0xF000 檔案型別掩碼
- S_IFDIR 0x4000 目錄
- S_IFIFO 0x1000 FIFO 專用
- S_IFCHR 0x2000 字元專用
- S_IFBLK 0x3000 塊專用
- S_IFREG 0x8000 只為0x0000
- S_IREAD 0x0100 可讀
- S_IWRITE 0x0080 可寫
- S_IEXEC 0x0040 可執行
- FILE *fopen(char *filename, char *mode)
- filename 檔名稱
- mode 開啟模式:
- r 只讀方式開啟一個文字檔案
- rb 只讀方式開啟一個二進位制檔案
- w 只寫方式開啟一個文字檔案
- wb 只寫方式開啟一個二進位制檔案
- a 追加方式開啟一個文字檔案
- ab 追加方式開啟一個二進位制檔案
- r+ 可讀可寫方式開啟一個文字檔案
- rb+ 可讀可寫方式開啟一個二進位制檔案
- w+ 可讀可寫方式建立一個文字檔案
- wb+ 可讀可寫方式生成一個二進位制檔案
- a+ 可讀可寫追加方式開啟一個文字檔案
- ab+ 可讀可寫方式追加一個二進位制檔案
區別:
1、緩衝檔案系統與非緩衝系統的區別
緩衝檔案系統(fopen):在記憶體為每個檔案開闢一個快取區,當執行讀操作,從磁碟檔案將資料讀入記憶體緩衝區,裝滿後從記憶體緩衝區依次讀取資料。寫操作同理。 記憶體緩衝區的大小影響著實際操作外存的次數,緩衝區越大,操作外存的次數越少,執行速度快,效率高。緩衝區大小由機器而定。 藉助檔案結構體指標對檔案管理,可讀寫字串、格式化資料、二進位制資料。 非緩衝檔案系統(open):依賴作業系統功能對檔案讀寫,不設檔案結構體指標,只能讀寫二進位制檔案。 2、open屬於低階IO,fopen屬於高階IO 3、open返回檔案描述符,屬於使用者態,讀寫需進行使用者態與核心態切換。 fopen返回檔案指標 4、open是系統函式,不可移植 fopen是標準C函式,可移植 5、一般用fopen開啟普通檔案,open開啟裝置檔案 6、如果順序訪問檔案,fopen比open快 如果隨機訪問檔案,open比fopen快