open close函式的使用

2021-08-18 23:32:37 字數 3051 閱讀 6500

#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 若此檔案不存在則建立它。使用此選項時需要提供第三個引數mode,表示該檔案的訪問許可權。

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

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

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

o)

stdin_fileno 0

stdout_fileno 1

stderr_fileno 2

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

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

相關函式

read,write,fcntl,close,link,stat,umask,unlink,fopen

表頭檔案

#include

#include

#include

定義函式
int

open

( const

char * pathname, int flags)

;int

open

( const

char * pathname,int flags, mode_t mode)

;

函式說明

引數pathname 指向欲開啟的檔案路徑字串。下列是引數flags 所能使用的旗標:

o_rdonly 以唯讀方式開啟檔案

o_wronly 以只寫方式開啟檔案

o_rdwr 以可讀寫方式開啟檔案。上述三種旗標是互斥的,也就是不可同時使用,但可與下列的旗標利用or(|)運算子組合。

o_creat 若欲開啟的檔案不存在則自動建立該檔案。

o_excl 如果o_creat也被設定,此指令會去檢查檔案是否存在。檔案若不存在則建立該檔案,否則將導致開啟檔案錯誤。此外,若o_creat與o_excl同時設定,並且欲開啟的檔案為符號連線,則會開啟檔案失敗。

o_noctty 如果欲開啟的檔案為終端機裝置時,則不會將該終端機當成程序控制終端機。

o_trunc 若檔案存在並且以可寫的方式開啟時,此旗標會令檔案長度清為0,而原來存於該檔案的資料也會消失。

o_nonblock 以不可阻斷的方式開啟檔案,也就是無論有無資料讀取或等待,都會立即返回程序之中。

o_ndelay 同o_nonblock。

o_sync 以同步的方式開啟檔案。

o_nofollow 如果引數pathname 所指的檔案為一符號連線,則會令開啟檔案失敗。

o_directory 如果引數pathname 所指的檔案並非為一目錄,則會令開啟檔案失敗。

此為linux2.2以後特有的旗標,以避免一些系統安全問題。引數mode 則有下列數種組合,只有在建立新檔案時才會生效,此外真正建檔案時的許可權會受到umask值所影響,因此該檔案許可權應該為(mode-umaks)。

s_irwxu00700 許可權,代表該檔案所有者具有可讀、可寫及可執行的許可權。

s_irusr 或s_iread,00400許可權,代表該檔案所有者具有可讀取的許可權。

s_iwusr 或s_iwrite,00200 許可權,代表該檔案所有者具有可寫入的許可權。

s_ixusr 或s_iexec,00100 許可權,代表該檔案所有者具有可執行的許可權。

s_irwxg 00070許可權,代表該檔案使用者組具有可讀、可寫及可執行的許可權。

s_irgrp 00040 許可權,代表該檔案使用者組具有可讀的許可權。

s_iwgrp 00020許可權,代表該檔案使用者組具有可寫入的許可權。

s_ixgrp 00010 許可權,代表該檔案使用者組具有可執行的許可權。

s_irwxo 00007許可權,代表其他使用者具有可讀、可寫及可執行的許可權。

s_iroth 00004 許可權,代表其他使用者具有可讀的許可權

s_iwoth 00002許可權,代表其他使用者具有可寫入的許可權。

s_ixoth 00001 許可權,代表其他使用者具有可執行的許可權。

返回值若所有欲核查的許可權都通過了檢查則返回0值,表示成功,只要有乙個許可權被禁止則返回-1。

錯誤**

eexist 引數pathname 所指的檔案已存在,卻使用了o_creat和o_excl旗標。

eaccess 引數pathname所指的檔案不符合所要求測試的許可權。

erofs 欲測試寫入許可權的檔案存在於唯讀檔案系統內。

efault 引數pathname指標超出可訪問記憶體空間。

einval 引數mode 不正確。

enametoolong 引數pathname太長。

enotdir 引數pathname不是目錄。

enomem 核心記憶體不足。

eloop 引數pathname有過多符號連線問題。

eio i/o 訪問錯誤。

附加說明

使用access()作使用者認證方面的判斷要特別小心,例如在access()後再作open()空檔案可能會造成系統安全上的問題。

範例

#include

#include

#include

#include

main()

執行

linux programmer!

open close函式的使用

1.open函式的使用 呼叫open函式可以開啟或建立乙個檔案 include include include int open const char pathname,int flags int open const char pathname,int flags,mode t mode path...

學習文件接觸到的知識 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...