詳細對比C語言中的chmod()函式和fchmod()函式
C語言chmod()函式:修改檔案許可權
標頭檔案:
1
|
#include <sys/types.h> #include <sys/stat.h> |
定義函式:
1
|
int
chmod( const
char * path, mode_t mode); |
函式說明:chmod()會依引數mode 許可權來更改引數path 指定檔案的許可權。
引數 mode 有下列數種組合:
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_IRUSR (S_IREAD) 00400 檔案所有者具可讀取許可權
5、S_IWUSR (S_IWRITE)00200 檔案所有者具可寫入許可權
6、S_IXUSR (S_IEXEC) 00100 檔案所有者具可執行許可權
7、S_IRGRP 00040 使用者組具可讀取許可權
8、S_IWGRP 00020 使用者組具可寫入許可權
9、S_IXGRP 00010 使用者組具可執行許可權
10、S_IROTH 00004 其他使用者具可讀取許可權
11、S_IWOTH 00002 其他使用者具可寫入許可權
12、S_IXOTH 00001 其他使用者具可執行許可權
注:只有該檔案的所有者或有效使用者識別碼為0,才可以修改該檔案許可權。
基於系統安全,如果欲將資料寫入一執行檔案,而該執行檔案具有S_ISUID 或S_ISGID 許可權,則這兩個位會被清除。如果一目錄具有S_ISUID 位許可權,表示在此目錄下只有該檔案的所有者或root 可以刪除該檔案。
返回值:許可權改變成功返回0, 失敗返回-1, 錯誤原因存於errno.
錯誤程式碼:
1、EPERM 程式的有效使用者識別碼與欲修改許可權的檔案擁有者不同, 而且也不具root 許可權.
2、EACCESS 引數path 所指定的檔案無法存取.
3、EROFS 欲寫入許可權的檔案存在於只讀檔案系統內.
4、EFAULT 引數path 指標超出可存取記憶體空間.
5、EINVAL 引數mode 不正確
6、ENAMETOOLONG 引數path 太長
7、ENOENT 指定的檔案不存在
8、ENOTDIR 引數path 路徑並非一目錄
9、ENOMEM 核心記憶體不足
10、ELOOP 引數path 有過多符號連線問題.
11、EIO I/O 存取錯誤
範例
1
2
3
4
5
6
7
|
/* 將/etc/passwd 檔案許可權設成S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH */ #include <sys/types.h> #include <sys/stat.h> main() { chmod( "/etc/passwd" , S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH); } |
C語言fchmod()函式:修改檔案的許可權
標頭檔案:
1
|
#include <sys/types.h> #include <sys/stat.h> |
定義函式:
1
|
int
fchmod( int fildes, mode_t mode); |
函式說明:fchmod()會依引數mode 許可權來更改引數fildes 所指檔案的許可權。引數fildes 為已開啟檔案的檔案描述詞。引數mode 請參考chmod ()。
返回值:許可權改變成功則返回0, 失敗返回-1, 錯誤原因存於errno.
錯誤程式碼:
1、EBADF 引數fildes 為無效的檔案描述詞。
2、EPERM 程式的有效使用者識別碼與欲修改許可權的檔案所有者不同, 而且也不具root 許可權。
3、EROFS 欲寫入許可權的檔案存在於只讀檔案系統內。
4、EIO I/O 存取錯誤。
範例
1
2
3
4
5
6
7
8
9
|
#include <sys/stat.h> #include <fcntl.h> main() { int fd; fd = open( "/etc/passwd" , O_RDONLY); fchmod(fd, S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH); close(fd); } |
相關文章
- C語言中函式printf()和函式scanf()的用法C語言函式
- C 語言中的 time 函式函式
- C語言中的abort函式C語言函式
- C語言中qsort函式的用法C語言函式
- linux下C語言中的mkdir函式與rmdir函式LinuxC語言函式
- C語言fchmod()函式:修改檔案的許可權C語言函式
- C語言中函式的返回值C語言函式
- 淺談C語言中函式的使用C語言函式
- C語言函式操作大全----(超詳細)C語言函式
- C語言中的 static變數、static函式C語言變數函式
- c語言中通過函式指標實現函式過載C語言函式指標
- 淺析C語言中的setjmp與longjmp函式C語言函式
- C語言中變參函式傳參探究C語言函式
- C語言中庫函式呼叫幾例(轉)C語言函式
- 詳解C語言函式C語言函式
- C語言中資料型別轉換函式C語言資料型別函式
- vue3函式setUp和reactive函式詳細講解Vue函式React
- dart系列之:dart語言中的函式Dart函式
- C語言 sizeof函式詳解C語言函式
- C語言的比較庫函式--qsortC語言函式
- C語言函式手冊:c語言庫函式大全|C語言標準函式庫|c語言常用函式查詢C語言函式
- SQLServer和Oracle的常用函式對比SQLServerOracle函式
- C 語言中返回字串函式的四種實現方法字串函式
- C++宏和函式的比較C++函式
- SQLServer和Oracle常用函式對比SQLServerOracle函式
- C++的函式和模板函式 (轉)C++函式
- C語言 itoa函式及atoi函式C語言函式
- C語言的函式C語言函式
- 【C語言】函式的概念和函式的呼叫(引數傳遞)C語言函式
- Signal ()函式詳細介紹 Linux函式函式Linux
- C語言中關於時間的函式函式
- python高階函式和C語言函式指標Python函式C語言指標
- C++中建構函式,拷貝建構函式和賦值函式的詳解C++函式賦值
- C 語言回撥函式詳解函式
- C語言中使用系統自帶的快排函式C語言函式
- python語言中類和函式的作用及區別!Python函式
- JAVA抽象類、介面和C++的虛擬函式對比Java抽象C++函式
- 時間函式對比函式