第3章 檔案I O

2021-08-16 22:04:08 字數 913 閱讀 4239

3.3 函式open和openat

呼叫open或openat函式可以開啟或建立乙個檔案。

#iinclude

int open(const char * path, int oflag, ... /* mode_t mode*/);

int openat(int fd, const char *path, int oflag, ... /* mode_t mode */);

兩函式的返回值:若成功,返回檔案描述符;若出錯,返回-1

我們將最後乙個引數寫成..., iso c 用這種方法表明餘下的引數的數量及其型別是可變的。對於open函式而言,僅當建立新檔案時才使用最後乙個引數(稍後將對此進行說明)。在函式型別中將此引數放置在注釋中。

path引數是要開啟或建立檔案的名字。oflag引數可用來說明此函式的多個選項。用下列乙個或多個常量進行「或」運算構成oflag引數(這些常量在標頭檔案中定義)。

由open和openat函式返回的檔案描述符一定是最小的未用描述符數值。這一點被某些應用程式用來在標準輸入、標準輸出或標準錯誤上開啟新的檔案。例如,乙個應用程式可以先關閉標準輸出(通常是檔案描述符1),然後開啟另乙個檔案,執行開啟操作前就能了解到該檔案一定會在檔案描述符1上開啟。在3.12節說明dup2函式時,可以了解到有更好的方法來保證在給定的描述符上開啟乙個檔案。

fd引數把open和openat函式區分開,共有3種可能性。

(1)path引數指定的是絕對路徑名,在這種情況下,fd引數被忽略,openat函式就相當於open函式。

(2)path引數指定的是相對路徑名,fd引數指出了相對路徑名在檔案系統中的開始位址。fd引數是通過開啟相對路徑名所在的目錄來獲取。

(3)path引數指定了相對路徑名,fd引數具有特殊值at_fdcwd。在這種情況下,路徑名在當前工作目錄中獲取,openat函式在操作上與open函式類似。

第3章 檔案I O

引言unix系統中的大多數檔案i o 只需要用到5個函式 open read write lseek以及close 檔案描述符 用於描述檔案開啟或者建立之後返回的乙個非負整數,可以理解為檔案的id 特殊用途的標號 0 標準輸入 1 標準輸出 2 標準錯誤 早期系統一般乙個程序最多開啟16個檔案,現在...

第3章 檔案I O

3.2 檔案描述符 對於核心而言,所有開啟的檔案都通過檔案描述符引用。檔案描述符時乙個非負整數。當開啟乙個現有檔案或建立乙個新檔案時,核心向程序返回乙個檔案描述符。當讀 寫乙個檔案時,使用open或creat返回的檔案描述符標識該檔案,將其作為引數傳送給read或write。按照慣例,unix系統s...

第3章 檔案I O

3.4 函式creat 也可呼叫create函式建立乙個新檔案。include int creat const char path,mode t mode 返回值 若成功,返回為只寫開啟的檔案描述符 若出錯,返回 1 注意,此函式等效於 open path,o wronly o creat o tr...