chmod函式的定義:
#include
#include
int chmod(const char *path, mode_t mode)
關於mode_t的定義:
#ifndef __mode_t_defined
typedef __mode_t mode_t;
# define __mode_t_defined
#endif
__mode_t的定義:
#define __mode_t __mode_t_type
#define __mode_t_type __u32_type
#define __u32_type unsigned int
可以看到mode_t的定義實際就是unsigned int形式的。
但是函式chmod(const char *path, mode_t mode)在解釋mode_t時是將這裡的mode當成8進製的去解釋。
引數 mode 有下列數種組合
s_isuid 04000 檔案的(set user-id on execution)位
s_isgid 02000 檔案的(set group-id on execution)位
s_isvtx 01000 檔案的sticky位
s_irusr(s_iread) 00400 檔案所有者具可讀取許可權
s_iwusr(s_iwrite)00200 檔案所有者具可寫入許可權
s_ixusr(s_iexec) 00100 檔案所有者具可執行許可權
s_irgrp 00040 使用者組具可讀取許可權
s_iwgrp 00020 使用者組具可寫入許可權
s_ixgrp 00010 使用者組具可執行許可權
s_iroth 00004 其他使用者具可讀取許可權
s_iwoth 00002 其他使用者具可寫入許可權
s_ixoth 00001 其他使用者具可執行許可權
比如要將檔案test的許可權修改為644 ,那麼可以採用以下幾種方法:
chmod("test", s_irusr|s_iwusr|s_irgrp|s_iroth);
chmod("test", 0644);
chmod("test", 420);
第一種方法是將00400和00200和00040和00004進行或運算,最終得到的結果就是0644(八進位制),而八進位制的0644就等於十進位制的420。所以上面三種方法是等效的。
當我們給chmod函式傳遞引數時他會將對應的十進位制的mode引數轉換為相應的八進位制進行運算。所以我們要將test檔案的許可權改為644時傳遞給函式chmod的引數不能直接是644。而應該是420。這是因為十進位制的420就等於八進位制的644。
但是我們使用chmod命令時卻可以直接輸入644。具體的chmod實現時我認為是將644接收後(接收時可能是以字串形式接收)認為644是八進位制的資料,然後將644轉換為對應的十進位制,然後直接傳遞給函式
chmod(const char *path, mode_t mode)。
linux中open 函式的mode t 含義
開啟檔案 新建檔案和關閉檔案操作 開啟檔案操作使用系統呼叫函式open 該函式的作用是建立乙個檔案描述符,其他的函式可以通過檔案描述符對指定檔案進行讀取與寫入的操作。開啟檔案的一般形式是 open 檔案路徑,標誌 函式的返回值是檔案描述符,如果開啟檔案成功返回乙個正整數,否則返回 1。標誌是用於指定...
chmod函式的使用
chmod函式改變目錄或者檔案的許可權 1 s isuid 04000 檔案的 set user id on execution 位 2 s isgid 02000 檔案的 set group id on execution 位 3 s isvtx 01000 檔案的sticky 位 4 s iru...
函式形參中的const引用
這裡將c primer中函式形參章節有關const和引用的問題簡單小結如下 一 非const非引用形參 這個是乙個平庸的情形。函式引數通過複製對應的實參實現初始化,函式本身對形參的修改不會影響到實參。傳遞給這類函式的實參可以是乙個const型的物件,也可以是非const的物件。乙個需要注意的事情是,...