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表示...