Linux中open和fopen的區別有哪些

2022-10-10 10:45:11 字數 1049 閱讀 7822

區別:1、open是unix系統呼叫函式,而fopen是ansic標準中的c語言庫函式;2、open的移植性沒fopen好;3、fopen只能操縱普通正規檔案,而open可以操作普通檔案、網路套接字等;4、open無緩衝,fopen有緩衝。

本教程操作環境:linux5.9.8系統、dell g3電腦。

linux系統:open與fopen的區別

1、**

從**的角度看,兩者能很好的區分開,這也是兩者最顯而易見的區別:

open是unix系統呼叫函式(包括linux等),返回的是檔案描述符(f'd),它是檔案在檔案描述符表裡的索引;

fopen是ansic標準中的c語言庫函式,在不同的系統中應該呼叫不同的核心api。返回的是乙個指向檔案結構的指標。

2、移植性

這一點從上面的**就可以推斷出來,`fopen`是c標準函式,因此擁有良好的移植性;而`open`是unix系統呼叫,移植性有限。如windows下相似的功能使用api函式`createfile`。

3、適用範圍

open返回檔案描述符,而檔案描述符是unix系統下的乙個重要概念,unix下的一切裝置都是以檔案的形式操作。如網路套接字、硬體裝置等。當然包括操作普通正規檔案(regular file)。

fopen是用來操縱普通正規檔案(regular file)的。

4、檔案io層次

如果從檔案io的角度來看,前者屬於低階io函式,後者屬於高階io函式。低階和高階的簡單區分標準是:誰離系統核心更近。低階檔案io執行在核心態,高階檔案io執行在使用者態。

5、緩衝

一句話總結一下,就是open無緩衝,fopen有緩衝。前者與read, write等配合使用, 後者與fread,fwrite等配合使用。

使用fopen函式,由於在使用者態下就有了緩衝,因此進行檔案讀寫操作的時候就減少了使用者態和核心態的切換(切換到核心態呼叫還是需要呼叫系統呼叫api:read,write);

而使用open函式,在檔案讀寫時則每次都需要進行核心態和使用者態的切換;

表現為,如果順序訪問檔案,fopen系列的函式要比直接呼叫open系列的函式快;如果隨機訪問檔案則相反。

linux 中 open和fopen的區別

open和fopen的區別 主要區別是涉及到系統,而不是緩衝。帶f的是標準io,可以移植。不帶f只能在unix linux系統呼叫。open乙個是整數,fopen乙個是指標 file 二者區別大致可以總結為以下幾點 1,fread是帶緩衝的,read不帶緩衝.2,fopen是標準c裡定義的,open...

linux 中 open和fopen的區別

open和fopen的區別 主要區別是涉及到系統,而不是緩衝。帶f的是標準io,可以移植。不帶f只能在unix linux系統呼叫。open乙個是整數,fopen乙個是指標 file 二者區別大致可以總結為以下幾點 1,fread是帶緩衝的,read不帶緩衝.2,fopen是標準c裡定義的,open...

Linux中open函式詳解

open 開啟檔案 相關函式 read,write,fcntl,close,link,stat,umask,unlink,fopen 頭文件 include include include 定義函式 int open const char pathname,int flags int open co...