chown() - Unix,Linux 系統呼叫 - 技術教學
Tutorials Point


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

版權所有 © 2014 tutorialspoint



  首頁     參考     討論論壇     關於 TP  

chown() - Unix,Linux 系統呼叫


previous next AddThis Social Bookmark Button

廣告

名稱

chown、fchown、lchown - 更改檔案的所有者

語法

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

int chown(const char *path, uid_t owner, gid_t group); int fchown(int fd, uid_t owner, gid_t group); int lchown(const char *path, uid_t owner, gid_t group);

描述

這些系統呼叫更改由pathfd指定的檔案的所有者和組。只有特權程序(Linux:具有CAP_CHOWN功能的程序)可以更改檔案的所有者。檔案的所有者可以將其檔案組更改為該所有者所屬的任何組。特權程序(Linux:具有CAP_CHOWN)可以任意更改組。

如果ownergroup指定為-1,則該ID不會更改。

當可執行檔案的所有者或組由非超級使用者更改時,S_ISUID和S_ISGID模式位將被清除。POSIX未指定當root執行chown()時是否也應發生這種情況;Linux的行為取決於核心版本。對於非組可執行檔案(S_IXGRP位已清除),S_ISGID位表示強制鎖定,並且不會被chown()清除。

返回值

成功時,返回零。出錯時,返回-1,並且errno被適當地設定。

錯誤

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

標籤描述
EACCES 路徑字首的元件被拒絕搜尋許可權。(另請參見path_resolution(2)。)
EFAULT path指向您可訪問的地址空間之外。
ELOOP 在解析path時遇到太多符號連結。
ENAMETOOLONG path太長。
ENOENT 檔案不存在。
ENOMEM 核心記憶體不足。
ENOTDIR 路徑字首的元件不是目錄。
EPERM 呼叫程序沒有更改所有者和/或組所需的許可權(見上文)。
EROFS 命名檔案位於只讀檔案系統上。
下面列出了fchown()的常見錯誤
EBADF 描述符無效。
EIO 修改inode時發生低階I/O錯誤。
ENOENT 見上文。
EPERM 見上文。
EROFS 見上文。

備註

在 2.1.81 之前的 Linux 版本中(與 2.1.46 不同),chown() 不跟蹤符號連結。從 Linux 2.1.81 開始,chown() 跟蹤符號連結,並且有一個新的系統呼叫lchown() 不跟蹤符號連結。從 Linux 2.1.86 開始,這個新呼叫(與舊的chown()具有相同的語義)獲得了相同的系統呼叫號,而chown()獲得了新引入的編號。

只有在定義_BSD_SOURCE時,fchown() 的原型才可用。

符合標準

4.4BSD、SVr4、POSIX.1-2001。

4.4BSD 版本只能由超級使用者使用(即,普通使用者不能放棄檔案)。

限制

在啟用了 UID 對映的 NFS 檔案系統上,有意違反了chown() 的語義。此外,訪問檔案內容的所有系統呼叫的語義都被違反,因為chown() 可能會導致對已開啟檔案的立即訪問撤銷。客戶端快取可能會導致所有權更改以允許使用者訪問的時間與其他客戶端上的使用者實際可以訪問檔案的時間之間存在延遲。

參見



previous next Printer Friendly

廣告


  

廣告



廣告