chmod命令可以使用八進制數來指定權限。首先man 2 chmod查看chmod函數原型
爲int chmod(const char *pathname,mode_t mode);權限更改成功返回0,失敗返回-1.錯誤代碼儲存在errno中
#include<stdio.h>
#include<stdlib.h> //strtol對應頭文件
#include<sys/stat.h>
#include<errno.h>
int main(int argc,char** argv) //argc記錄指令數,argv記錄指令
{
int mode; //mode_t類型
char* path;
if(argc<3) //當指令數小於3時報錯,並結束程序
{
printf("%s <mode num> <target file>\n",argv[0]);
exit(0);
}
mode=strtol(argv[1],NULL,8); //將輸入的權限對應字符串轉換爲八進制數字
if(mode>0777||mode<0) //當mode>八進制的777時報錯並結束程序
{
printf("mode num error!\n");
exit(0);
}
path=argv[2]; //path指向待更改權限的文件名
if(chmod(path,mode)==-1) //更改權限失敗時報錯,並結束程序
{
perror("chmod error!");
exit(1);
}
return 0;
}
在這裏需要說明一下,strtol的返回值爲long int,也就是說我們在用mode存儲strtol的返回值時,八進制已經被強制轉換爲十進制了,例如我們要更改的權限爲777,則mode的值爲十進制的 511.然後chmod會去識別輸入的爲八進制還是十進制。然後去將文件的權限更改爲八進制對應的權限。
最後咱們看看結果。
首先創建一個新的文件,然後再用我們的程序去更改其權限爲0。
我們還可以將生成的可執行文件放到公共目錄中,然後通過alias對”絕對路徑/my_chmod”起別名爲my_chmod。那麼我們就可以在別的目錄下使用咱們寫的my_chmod指令了(my_chmod後的文件名應當爲絕對路徑)。