c語言open方式檔案開啟和建立,linux系統

2021-09-11 16:33:23 字數 2583 閱讀 8053

open函式開啟需要的標頭檔案:

#include

#include

#include

open使用原型:

int open( const char * pathname, int flags);

int open( const char * pathname,int flags, mode_t mode);

const表示常量,pathname表示想要開啟的檔案路徑(用字串表示eg:在linux裡「/tmp/temp"),引數flags所有的用法:

o_rdonly若需要兩個或以上的flags則可用|隔開

而引數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中可用」ll",命令檢視

類似上圖,許可權去掉第乙個,共有九個字元,r可讀許可權,w可寫許可權,x可執行許可權。三組資料分別代表不同的使用者,創作者,運用者之分,不同的身份開啟許可權不同。

(一組之中的三個數分別用三位二進位制表示,4,2,1,所以最大是7,最小是0)

上例中,目錄的許可權為 775,檔案的許可權為 664。對比之下發現目錄比檔案多了執行的許可權。這是因為執行許可權對於目錄來說是非常重要的,有了目錄的執行許可權才能夠進入目錄中進行檔案操作。

預設情況下對於目錄來說最大的許可權是 777,對於檔案來說最大的許可權一般為 666(只有可以執行的檔案才新增可執行許可權)。所以我們建立的檔案和目錄的共同特點是從最大許可權中減去了 2,也就是其他使用者的寫許可權。而這個被減去的值就是我們常說的 umask。umask 還是 bash 的乙個內建命令,預設輸出當前使用者的 umask 值:

注意,umask 顯示的值為從預設的最大許可權中減去的值。上圖中的第乙個 0 表示的是特殊許可權位,這裡我們可以暫時忽略它。

umaks:

當我們登入系統之後建立乙個檔案總是有乙個預設許可權的,那麼這個許可權是怎麼來的呢?這就是umask幹的事情。umask設定了使用者建立檔案的預設 許可權,它與chmod的效果剛好相反,umask設定的是許可權「補碼」,而chmod設定的是檔案許可權碼。一般在/etc/profile、$ [home]/.bash_profile或$[home]/.profile中設定umask值。

最簡單的方式就是為 umask 命令指定乙個數字:

$ umask 026

026 的含義為:去掉 group 中的寫許可權,去掉 other 中的讀寫許可權。

這時建立的檔案許可權為 640,目錄許可權為 751。注意,修改 umask 後只有新建的檔案和目錄受影響,已經存在的檔案和目錄的許可權不會被影響。

有可能出現的錯誤**:

eexist 引數pathname 所指的檔案已存在,卻使用了o_creat和o_excl旗標。

eaccess 引數pathname所指的檔案不符合所要求測試的許可權。

erofs 欲測試寫入許可權的檔案存在於唯讀檔案系統內。

efault 引數pathname指標超出可訪問記憶體空間。

einval 引數mode 不正確。

enametoolong 引數pathname太長。

enotdir 引數pathname不是目錄。

enomem 核心記憶體不足。

eloop 引數pathname有過多符號連線問題。

eio i/o 訪問錯誤。

簡單示例:

#include #include #include #include main()

C語言 開啟檔案open函式

函式說明 引數mode 則有下列數種組合,只有在建立新檔案時才會生效,此外真正建檔案時的許可權會受到umask 值所影響,因此該檔案許可權應該為 mode umaks s irwxu00700 許可權,代表該檔案所有者具有可讀 可寫及可執行的許可權.s irusr 或s iread,00400 許可...

python 開啟檔案open和codecs區別

當我面有資料需要儲存時,第一時間一般會想到寫到乙個txt檔案中,當然,資料量比較大的時候還是寫到資料庫比較方便管理,需要進行網路傳輸時要序列化,json化。下面主要整理一下平時用的最多的寫入到檔案中,一般以txt結尾,linux裡不會以後綴來區分檔案型別,字尾可以隨便,也可以沒有。python讀寫檔...

C語言檔案開啟方式及說明

ansi c規定檔案開啟用函式fopen,關閉為fclose。1 呼叫方式通常為 file fp fp fopen 檔名,開啟方式 2 引數說明 檔名 形如 myfile.dat f data myfile.dat 等等 開啟方式 r 唯讀 為輸入開啟乙個文字檔案 w 只寫 為輸出開啟乙個文字檔案 ...