我有這樣的代碼:C:與nftw()奇怪的行爲
#include <ftw.h>
#include <stdio.h>
#include <string.h>
int nftw_stat(const char *path, const struct stat *stat, int flags,
struct FTW *ftw)
{
if (strcmp(path, "/home/pf/.gvfs\0") == 0) {
printf("nftw()\n");
printf("mode = %d\n", stat->st_mode);
printf("size = %d\n", (int) stat->st_size);
}
return 0;
}
int main()
{
if (nftw("/home/pf", &nftw_stat, 1, FTW_PHYS)) {
perror("nftw");
return 2;
}
}
如果我正常執行它,它返回的方式stat()函數相同:
mode = 16704 (S_IFDIR | S_IRUSR | S_IXUSR) size = 0
但是,當我執行它與sudo
,它返回這個:
mode = 16832 (S_IFDIR | S_IRWXU) size = 4096
會發生什麼?如果我使用stat()
與sudo
它給我的權限被拒絕錯誤。這僅在.gvfs
目錄下發生,其目錄權限爲500(dr-x ------)。如果sudo
無法與stat()
一起閱讀,爲什麼它與nftw()
一起使用? :|
什麼是/ home/pf目錄上的保護?這控制着你所看到的,而不是.gvfs目錄本身的權限掩碼。 – 2010-11-09 11:06:00
順便說一句,你不需要給C字符串自己添加'\\ 0'。 – Hasturkun 2010-11-09 11:26:04
相關提示@Hasturkun。謝謝你的提示! (我是C新手) – 2010-11-09 11:44:12