Linux中chmod指令的實現

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後的文件名應當爲絕對路徑)。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章