Linux程式設計下open 函式的用法

2021-08-14 13:32:56 字數 1662 閱讀 9547

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