Linux系統呼叫之open , close

2021-06-19 18:35:53 字數 2945 閱讀 2468

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

#include

#include

#include

intopen(constchar*pathname,intflags);

intopen(constchar*pathname,intflags, mode_t mode);

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

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

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

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

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

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

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

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

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

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

close函式關閉乙個已開啟的檔案:

#include

intclose(intfd);

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

引數fd是要關閉的檔案描述符。需要說明的是,當乙個程序終止時,核心對該程序所有尚未關閉的檔案描述符

呼叫close關閉,所以即使使用者程式不呼叫close,在終止時核心也會自動關閉它開啟的所有檔案。但是對於一

個長年累月執行的程式(比如網路伺服器),開啟的檔案描述符一定要記得關閉,否則隨著開啟的檔案越來越

多,會占用大量檔案描述符和系統資源。

給個例子:

//

#include

#include

#include

#include

intmain(intargc,constchar*argv)

編譯:$cctest.c

執行:$./a.out

檢視結果:$umask

0002

$ll

總計 12

-rwxrwxr-x 1 joseph joseph 5085 12-17 10:35 a.out

-rw-rw-r– 1 joseph joseph    0 12-17 10:33 mytest

-rw-rw-r– 1 joseph joseph  263 12-17 10:35test.c

以上例子以mode 0666建立乙個檔案mytest,而umask是0002,

所以建立的檔案許可權是0666-0002=0664(-rw-rw-r–)。

Linux系統呼叫之open, close

一 open函式可以開啟或建立乙個檔案。include include include int open const char pathname,int flags int open const char pathname,int flags,mode t mode 返回值 成功返回新分配的檔案描述...

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

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

系統呼叫之lseek

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