Linux學習筆記6 access函式

2021-07-25 05:08:28 字數 1145 閱讀 6513

呼叫open函式時,是以有效使用者而不是實際使用者的身份去驗證程序對要開啟的檔案的讀寫許可權。但是有時候我們想知道的是實際使用者而非有效使用者對某一檔案的許可權,此時就要用到access函式。

#includeint access(const char* pathname, int mode);

int faccessat(int fd, const char* pathname, int mode, int flag);

先說簡單的access函式,pathname是檔案的路徑名+檔名,指定要測試的檔案;mode則指明測試哪種許可權,實際上有4種:

對於後三種情況,可以用「或」的方法將多種情況合在一起測試,比如r_ok | w_ok就代表測試程序對檔案的讀寫許可權.

對於faccessat函式,其用fd來指定目錄,mode的含義不變,而flag可以指定是判斷有效使用者的許可權還是實際使用者的許可權。

如果flag的值是af_eaccess(值為0x200)的話,判斷的是有效使用者的許可權;

如果flag的值是0的話,則跟access一樣,判斷的是實際使用者的許可權。

當判斷有許可權時,返回0,否則返回-1.

舉例如下:

#include #include #include #include #include #include void err_sys(char *);

void err_sys(char *err_txt)

int main(int argc, char* argv)

執行效果如下:

我們將study4可執行檔案設定上「設定使用者id位」和「設定組id位」。同時study4的使用者id和組id都是0(root使用者)。同時當前目錄下,snow.txt檔案只對root使用者開放寫許可權。回到普通使用者,執行study4,判斷其對snow.txt檔案的訪問許可權。

有事設定了「設定使用者id位」和「設定組id位」,有效使用者id和有效組id都變成了root,而實際使用者id和實際組id都是1000,代表hy。

root使用者當然能成功的呼叫open函式,而使用者hy沒有snow.txt檔案的讀寫許可權,所以access失敗。

Linux學習筆記(6)

12.不同系統之間的檔案傳輸 3.檔案查詢 1.locate filename 在檔案資料庫中搜尋filename資訊,updatedb更新檔案資料庫 2.find find 查詢位置 條件 條件值 exec 動作 name not 條件 user group size perm maxdepth ...

Linux學習筆記(6)

我們可以在執行 shell 指令碼時,向指令碼傳遞引數,指令碼內獲取引數的格式為 n。n代表乙個數字,1 為執行指令碼的第乙個引數,2 為執行指令碼的第二個引數,以此類推 以下例項我們向指令碼傳遞三個引數,並分別輸出,其中 0為執行的檔名 bin bash author 菜鳥教程 url www.r...

linux驅動學習筆記6

在open函式中寫申請中斷函式 request irq int request irq unsigned int irq,void handler int irq,void dev id,struct pt regs regs unsigned long irqflags,const char de...