chmod() - Unix、Linux 系統呼叫 - 技術教學
Tutorials Point


  Unix 初學者指南
  Unix Shell 程式設計
  高階 Unix
  Unix 有用參考
  Unix 有用資源
  精選閱讀

版權所有 © 2014 tutorialspoint



  首頁     參考     討論論壇     關於 TP  

chmod() - Unix、Linux 系統呼叫


previous next AddThis Social Bookmark Button

廣告

名稱

chmod、fchmod - 更改檔案許可權

語法

#include <sys/types.h>
#include <sys/stat.h> 

int chmod(const char *path, mode_t mode); int fchmod(int fildes, mode_t mode);

描述

更改由path給定或由fildes引用的檔案模式。

模式透過或運算以下方式指定

模式描述
S_ISUID04000 執行時設定使用者 ID
S_ISGID02000 執行時設定組 ID
S_ISVTX01000 粘滯位
S_IRUSR00400 所有者可讀
S_IWUSR00200 所有者可寫
S_IXUSR00100 所有者可執行/搜尋
S_IRGRP00040 組可讀
S_IWGRP00020 組可寫
S_IXGRP00010 組可執行/搜尋
S_IROTH00004 其他使用者可讀
S_IWOTH00002 其他使用者可寫
S_IXOTH00001 其他使用者可執行/搜尋

呼叫程序的有效 UID 必須與檔案的所有者匹配,或者程序必須具有特權(Linux:它必須具有CAP_FOWNER功能)。

如果呼叫程序沒有特權(Linux:沒有CAP_FSETID功能),並且檔案的組與程序的有效組 ID 或其任何補充組 ID 不匹配,則 S_ISGID 位將被關閉,但這不會導致返回錯誤。

作為一項安全措施,根據檔案系統,如果寫入檔案,則可能會關閉 set-user-ID 和 set-group-ID 執行位。(在 Linux 上,如果寫入程序沒有CAP_FSETID功能,就會發生這種情況。)在某些檔案系統上,只有超級使用者可以設定粘滯位,它可能具有特殊含義。對於粘滯位,以及目錄上的 set-user-ID 和 set-group-ID 位,請參閱stat(2)。

在 NFS 檔案系統上,限制許可權會立即影響已開啟的檔案,因為訪問控制是在伺服器上完成的,但開啟的檔案由客戶端維護。如果在客戶端上啟用了屬性快取,則擴充套件許可權可能會延遲到其他客戶端。

返回值

成功時,返回零。發生錯誤時,返回 -1,並且errno被相應地設定。

錯誤

根據檔案系統,可以返回其他錯誤。chmod() 的更常見的錯誤列在下面

錯誤程式碼描述
EACCES 路徑字首的元件上的搜尋許可權被拒絕。(另請參閱path_resolution(2)。)
EFAULT path指向您可訪問的地址空間之外。
EIO 發生 I/O 錯誤。
ELOOP 在解析path時遇到太多符號連結。
ENAMETOOLONG path太長。
ENOENT 檔案不存在。
ENOMEM 核心記憶體不足。
ENOTDIR 路徑字首的元件不是目錄。
EPERM 有效 UID 與檔案的所有者不匹配,並且程序沒有特權(Linux:它沒有CAP_FOWNER功能)。
EROFS 命名檔案位於只讀檔案系統上。
fchmod() 的一般錯誤列在下面
EBADF 檔案描述符fildes無效。
EIO 參見上文。
EPERM 參見上文。
EROFS 參見上文。

符合標準

4.4BSD、SVr4、POSIX.1-2001。

參見



previous next Printer Friendly

廣告


  

廣告



廣告