再次學習linux編程open函數

一、open介紹


對於open函數的同名處理辦法(個人理解爲c語言的“多態”)。前一篇文章(C語言可變長參數實現“多態”)已經分析過了,下面是對open函數中的參數的一些詳細解釋。

回顧一下open函數的聲明


二、參數詳解


第一個參數pathname:要打開的文件位置


第二個參數flags:打開文件打方式


可取值:


O_RDONLY  只讀的方式打開文件
O_WRONLY 只寫的方式打開文件
O_RDWR 以 讀寫的方式打開文件
O_APPEND 追加的方式打開文件
O_CREAT    如果文件不存在,創建一個文件
O_EXEC      如果使用了O_CREAT而且文件已經存在,就會發生一個錯誤
O_NOBLOCK 以非阻塞的方式打開一個文件
O_TRUNC  如果文件已經存在,則刪除文件的內容

注:O_RDONLY、O_WRONLY、O_RDWR只能一次使用一個。


第三個參數mode:如果要打開的文件不存在,則創建文件(第二個參數中包含了O_CREAT),給新文件賦予的操作權限


可取值:


文件所屬用戶權限:

S_IRUSR      讀
S_IWUSR     寫
S_IXUSR      執行
S_IRWXU     讀、寫、執行

文件所屬組權限:

S_IRGRP     讀
S_IWGRP    寫
S_IXGRP     執行
S_IRWXG    讀、寫、執行

其它用戶權限:

S_IROTH     讀
S_IWOTH    寫
S_IXOTH     執行
S_IRWXO    讀、寫、執行

額外權限:

S_ISUID 設置用戶的執行ID
S_ISGID 設置組的執行ID

注:對於什麼是用戶執行ID和組執行ID,也就是文件的SUID和SGID,其實還有一個Sticky Bit(一般稱爲粘滯位),可以看我以前總結的一篇文章:再次學習linux文件特殊權限:SUID、SGID、Sticky Bit

除了使用以上的表示辦法之外我們還可以用數字(umask值)來表示文件的操作權限(umask值爲四位)

摘取參考文章的其中一段詳細介紹了五位的文件權限表示

“Linux總共用5個數字來表示文件的各種權限:

第一位表示設置用戶ID;

第二位表示設置組ID;

第三位表示用戶自己的權限位;

第四位表示組的權限;

第五位表示其他人的權限。

每個數字可以取1(執行權限)、2(寫權限)、4(讀權限)、0(無)或者是這些值的和。

例如,要創建一個用戶可讀、可寫、可執行,但是組沒有權限,其他人可以讀、可以執行的文件,並設置用戶ID位。那麼,我們應該使用的模式是1(設置用戶ID)、0(不設置組 ID)、7(1+2+4,讀、寫、執行)、0(沒有權限)、5(1+4,讀、執行)即10705:

open("test", O_CREAT, 10705);

  上述語句等價於:

open("test", O_CREAT, S_IRWXU | S_IROTH | S_IXOTH | S_ISUID );

  如果文件打開成功,open函數會返回一個文件描述符,以後對該文件的所有操作就可以通過對這個文件描述符進行操作來實現。

OK,對於open函數的就到這裏。需要深入的同學請移步至參考資料所列博文


三、參考資料


1、http://blog.csdn.net/xinyuwuxian/article/details/9284633

2、http://sharp2wing.iteye.com/blog/1280755

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章