linux程式設計下open()函式的用法
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);
返回值:若所有欲核查的許可權都通過了檢查則返回0 值,表示成功,只要有乙個許可權被禁止則返回-1。
一般的寫法是if((fd=open("/dev/ttys0",o_rdwr | o_noctty | o_ndelay)<0)
這個事常用的一種用法fd是裝置描述符,linux在操作硬體裝置時,遮蔽了硬體的基本細節,
只把硬體當做檔案來進行操作,而所有的操作都是以open函式來開始,它用來獲取fd,
然後後期的其他操作全部控制fd來完成對硬體裝置的實際操作。你要開啟的/dev/ttys0,代表的是串列埠1,
也就是常說的com1,後面跟的是一些控制字。
注意:(1)這些控制字都是通過「或」符號分開(|)
(2)o_nonblock和o_ndelay所產生的結果都是使i/o變成非阻塞模式(non-blocking),在讀取不到資料或是寫入緩衝區已滿會馬上return,而不會阻塞等待。
它們的差別在於:在讀操作時,如果讀不到資料,o_ndelay會使i/o函式馬上返回0,但這又衍生出乙個問題,因為讀取到檔案末尾(eof)時返回的也是0,這樣無法區分是哪種情況。因此,o_nonblock就產生出來,它在讀取不到資料時會回傳-1,並且設定errno為eagain。
o_ndelay是在system v的早期版本中引入的,在編碼時,還是推薦posix規定的o_nonblock,o_nonblock可以在open和fcntl時設定
(3)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 許可權,代表其他使用者具有可執行的許可權。
Linux程式設計下open 函式的用法
open 開啟檔案 相關函式 read,write,fcntl,close,link,stat,umask,unlink,fopen 表頭檔案 include include include 定義函式 int open const char pathname,int flags int open c...
LINUX下OPEN函式簡介
open 函式用於開啟和建立檔案。以下是 open 函式的簡單描述 fcntl.h int open const char pathname,int oflag,mode t mode 返回值 成功則返回檔案描述符,否則返回 1 對於 open 函式來說,第三個引數 僅當建立新檔案時才使用,用於指定...
linux下open函式和creat函式
open 函式用於開啟和建立檔案。以下是 open 函式的簡單描述 include fcntl.h int open const char path,int access,int mode 返回值 成功則返回檔案描述符,否則返回 1 path 要開啟的檔案路徑和名稱 如 c cpp a.cpp ac...