Linux中open函式詳解

2021-06-14 05:00:46 字數 2587 閱讀 9717

open(開啟檔案) 

相關函式

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 所指的檔案並非為一目錄,則會令開啟檔案失敗。 

引數mode 組合

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

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

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 許可權,代表其他使用者具有可執行的許可權。 

返回值

若所有欲核查的許可權都通過了檢查則返回檔案描述符,表示成功,只要有乙個許可權被禁止則返回-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()空檔案可能會造成系統安全上的問題。 

範例[cpp]view plain

copy

print?

#include

#include

#include

#include

void main()   

#include#include#include#includevoid main() 

執行 

linux programmer!

linux中open 函式的mode t 含義

開啟檔案 新建檔案和關閉檔案操作 開啟檔案操作使用系統呼叫函式open 該函式的作用是建立乙個檔案描述符,其他的函式可以通過檔案描述符對指定檔案進行讀取與寫入的操作。開啟檔案的一般形式是 open 檔案路徑,標誌 函式的返回值是檔案描述符,如果開啟檔案成功返回乙個正整數,否則返回 1。標誌是用於指定...

open函式的flag詳解2

朱老師物聯網大講堂 學習筆記 上節討論的前提是檔案存在,進而討論那些內容,那如果檔案不存在呢?當我們去開啟乙個並不存在的檔案時,就會檔案開啟錯誤的!o creat,建立並開啟,fd open a.txt o rdwr o creat 那如果檔案存在,還這樣做會怎楊?試試,原來的檔案會被刪除,然後重新...

八 open函式的flag詳解

3.1.4.open函式的flag詳解1 3.1.4.1 讀寫許可權 o rdonly o wronly o rdwr 1 linux中檔案有讀寫許可權,我們在open開啟檔案時也可以附帶一定的許可權說明 譬如o rdonly就表示以唯讀方式開啟,o wronly表示以只寫方式開啟,o rdwr表示...