open函式的flag詳解2

2021-07-14 13:38:02 字數 1537 閱讀 8045

《朱老師物聯網大講堂》學習筆記

上節討論的前提是檔案存在,進而討論那些內容,

那如果檔案不存在呢?

當我們去開啟乙個並不存在的檔案時,

就會檔案開啟錯誤的!

o_creat, 建立並開啟,

fd = open("a.txt", o_rdwr | o_creat );

那如果檔案存在,還這樣做會怎楊?

試試,原來的檔案會被刪除,然後重新建立乙個,

說到這裡,你又沒發現這樣做可能存在的隱患?

於是就有了這種用法,

fd = open( "a.txt", o_rdwr | o_creat | o_excl );

當檔案存在時候,就會報錯,

ps:這裡建立出來的檔案,許可權和其它有些不一樣,如何控制呢?

fd = open( "a.txt", o_rdwr | o_creat | o_excl ,0666 );

0666代表建立乙個可讀可寫不可執行的檔案,

o_nonblock

阻塞有非阻塞,

呼叫乙個阻塞式函式,那呼叫這個函式的程序可能被卡主,需要等待需要的條件具備才可能執行,

呼叫乙個非阻塞式的函式,那呼叫這個函式會立即返回,不過它到底完成任務沒,就不知道了,因為它不願意等啊,

開啟檔案預設就是阻塞式的,如果想非阻塞就加o_nonblock,

阻塞和非阻塞,是對裝置檔案來說的,普通檔案沒有這些。

o_nonblock or o_ndelay

when  possible, the file is opened in nonblocking mode.  neither

the open() nor any subsequent operations on the file  descriptor

which  is  returned will cause the calling process to wait.  for

the handling of fifos (named pipes), see also  fifo(7).   for  a

discussion  of  the  effect  of  o_nonblock  in conjunction with

mandatory file locks and with file leases, see fcntl(2).

o_sync

作業系統層,有個緩衝區,

沒有這個標誌的時候,write只是將內容寫入到底層的緩衝區,在合適的時候才會將buf中的內容,同步寫入硬碟中,

如果不想等待,就加o_sync標誌,

o_sync the  file  is  opened for synchronous i/o.  any write(2)s on the

resulting file descriptor will block the calling  process  until

the data has been physically written to the underlying hardware.

but see notes below.

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

open函式以及函式中flag常用的巨集詳解

int open const char pathname,int flags,mode t mode 功能 開啟或建立檔案 pathname 檔案路徑 flag 開啟檔案時的許可權 o rdonly 唯讀 o wronly 只寫 o rdwr 讀寫 o creat 檔案不存在時則建立 o excl ...

Linux中open函式詳解

open 開啟檔案 相關函式 read,write,fcntl,close,link,stat,umask,unlink,fopen 頭文件 include include include 定義函式 int open const char pathname,int flags int open co...