Linux系統呼叫之open, close

2021-07-25 11:04:50 字數 1501 閱讀 7102

一、open函式可以開啟或建立乙個檔案。

#include 

#include

#include

int open(const

char *pathname, int flags);

int open(const

char *pathname, int flags, mode_t mode);

返回值:成功返回新分配的檔案描述符,出錯返回-1並設定errno

pathname

引數是要開啟或建立的檔名,和fopen一樣,pathname既可以是相對路徑也可以是絕對路徑。

flags

引數有一系列常數值可供選擇,可以同時選擇多個常數用按位或運算子連線起來,所以這些常數的巨集定義都以o_開頭,表示or。

必選項:以下三個常數中必須指定乙個,且僅允許指定乙個。

1、o_rdonly 唯讀開啟

2、o_wronly 只寫開啟

3、o_rdwr 可讀可寫開啟

以下可選項可以同時指定0個或多個,和必選項按位或起來作為flags引數。

2、o_creat 若此檔案不存在則建立它。使用此選項時需要提供第三個引數mode,表示該檔案的訪問許可權。

3、o_excl 如果同時指定了o_creat,並且檔案已存在,則出錯返回。

4、o_trunc 如果檔案已存在,並且以只寫或可讀可寫方式開啟,則將其長度截斷(truncate)為0位元組。

5、o_nonblock 對於裝置檔案,以o_nonblock方式開啟可以做非阻塞i/o(nonblock i/o)。

mode

指定檔案許可權,可以用八進位制數表示,比如0644表示-rw-r–r–,也可以用s_irusr、s_iwusr等巨集定義按位或起來表示,詳見open(2)的man page。要注意的是,檔案許可權由open的mode引數和當前程序的umask掩碼共同決定。

二、close函式關閉乙個已開啟的檔案。

#include 

int close(int fd);

返回值:成功返回0,出錯返回-1並設定errno

引數fd是要關閉的檔案描述符。需要說明的是,當乙個程序終止時,核心對該程序所有尚未關閉的檔案描述符呼叫close關閉,所以即使使用者程式不呼叫close,在終止時核心也會自動關閉它開啟的所有檔案。但是對於乙個長年累月執行的程式(比如網路伺服器),開啟的檔案描述符一定要記得關閉,否則隨著開啟的檔案越來越多,會占用大量檔案描述符和系統資源。
簡單例項:

#include 

#include

#include

#include

int main()

Linux系統呼叫之open , close

open函式可以開啟或建立乙個檔案。include include include intopen constchar pathname,intflags intopen constchar pathname,intflags,mode t mode 返回值 成功返回新分配的檔案描述符,出錯返回 1...

linux系統呼叫之檔案系統操作

access 確定檔案的可訪問性 chdir 改變當前工作目錄 fchdir 參見chdir chmod 改變檔案方式 fchmod 參見chmod chown 改變檔案的屬主或使用者組 fchown 參見chown lchown 參見chown chroot 改變根目錄 stat 取檔案狀態資訊 ...

系統呼叫之lseek

注意 這個指標是和檔案描述符相掛鉤的,並不與這個檔案掛鉤,所以可以有多個程序來對這個檔案進行操作,不會影響各自。當從檔案讀取資料時,核心從指標指向的位置開始,讀取指定的位元組數,然後移動指標,指向下乙個未被讀取過的位元組,寫檔案的過程也是類似。off t oldpos lseek int fd,of...