1
剛開始學習一些基本的C並在Linux上調試stat()系統調用。Linux C stat()八進制權限掩碼,連接發送到函數?
所以st_mode
從stat()返回的結構是一個位域。我只能通過printf("octal %o", st.st_mode)
獲得八進制權限,但我只對位域中的某些標誌感興趣,即S_IRWXU, S_IRWXG and S_IRWXO
將該值發送給另一個函數,例如:mkdir。
這是我的示例程序。
忽略這樣一個事實,即這是一個垃圾程序,其目錄是硬編碼的,沒有作爲參數傳遞給create_dir()
函數並且沒有錯誤檢查。
#include <stdio.h>
#include <sys/stat.h>
static int create_dir(mode_t mode) {
mkdir("/home/user/blahnew", mode);
}
main() {
struct stat st;
int res;
res = stat("/home/user/blah", &st);
printf("user %o\n", st.st_mode & S_IRWXU);
printf("group %o\n", st.st_mode & S_IRWXG);
printf("other %o\n", st.st_mode & S_IRWXO);
create_dir(mode);
return 0;
}
我怎麼可以在st.st_mode只以上flages並把它作爲一個八進制來create_dir()
由一個mkdir()
功能可以使用?
如果我只是做了create_dir(st.st_mode)
會不會也通過所有其他標誌mkdir()
不需要... uid,gid,sticky bit等?
乾杯,B
砰!這就是我所缺少的,一種加入位掩碼標誌的方法。我知道必須有一種方式,比我想象的要容易得多!謝謝! – batfastad
很高興幫助。您可以看到按位OR將如何設置其他掩碼中存在的任何位。如果這回答你的問題,你能把這個標記爲接受嗎? –
完成。你的回答太快,我必須等幾分鐘才能接受! – batfastad