open close函式的使用

2021-08-01 22:11:05 字數 2324 閱讀 3712

**:

1.open函式的使用

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

#include 

#include

#include

int open(const

char *pathname, int flags);

int open(const

char *pathname, int flags, mode_t mode);

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

flags引數用來說明此函式的多個選項。用下列乙個或多個常量進行」或」運算構成flags引數。(常量在fcntl.h標頭檔案中定義)

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

o_rdonly 唯讀開啟

o_wronly 只寫開啟

o_rdwr 可讀可寫開啟

stdin_fileno 0

stdout_fileno 1

stderr_fileno 2

注意open函式與c標準i/o庫的fopen函式有些細微的區別:

以可寫的方式fopen乙個檔案時,如果檔案不存在會自動建立,而open乙個檔案時必須明確指定o_creat才會建立檔案,否則檔案不存在就出錯返回。

以w或w+方式fopen乙個檔案時,如果檔案已存在就截斷為0位元組,而open乙個檔案時必須明確指定o_trunc才會截斷檔案,否則直接在原來的資料上改寫。

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

示例:

#include 

#include

#include

#include

#include

int main(void)

printf("fd = %d\n", fd);

return

0;}

執行結果:

cat@lenovo

:~/blog/

0719$ ./open

fd = 3

cat@lenovo

:~/blog/

0719$ ls -lh hello

-rwxrwxr-x 1 cat cat 0

7月 2000:

12 hello

cat@lenovo

:~/blog/

0719$ umask

0002

2.close函式的使用

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

#include 

int close(int fd);

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

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

由open返回的檔案描述符一定是該程序尚未使用的最小描述符。由於程式啟動時自動開啟檔案描述符0、1、2,因此第一次呼叫open開啟檔案通常會返回描述符3,再呼叫open就會返回4。可以利用這一點在標準輸入、標準輸出或標準錯誤輸出上開啟乙個新檔案,實現重定向的功能。例如,首先呼叫close關閉檔案描述符1,然後呼叫open開啟乙個常規檔案,則一定會返回檔案描述符1,這時候標準輸出就不再是終端,而是乙個常規檔案了,再呼叫printf就不會列印到螢幕上,而是寫到這個檔案中了。

示例:

#include 

#include

#include

#include

#include

#include

int main(void)

printf("hello world\n");

return

0;}

執行結果:

cat@lenovo

:~/blog/

0719$ ./close

cat@lenovo

:~/blog/

0719$ cat cat

hello world

open close函式的使用

include include include int open const char pathname,int flags int open const char pathname,int flags,mode t mode o wronly 只寫開啟 o rdwr 可讀可寫開啟 o creat ...

學習文件接觸到的知識 openclose

辛辛苦苦整理,腦子卻不是很清楚,都怪晚上貓不睡覺,讓我也沒睡好 openset 和 closeset def get sample return sample with get sample as sample print sample sample in enter sample foo in e...

函式的使用

函式的定義 我們有乙個很簡單的函式echoname function echoname 他的結構如下 array type function name echoname property array child array array type echo value array type strin...