我有这个代码:
#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() 函数相同:
模式 = 16704 (S_IFDIR | S_IRUSR | S_IXUSR) 大小 = 0
但是当我用 执行它时sudo
,它会返回:
模式 = 16832 (S_IFDIR | S_IRWXU) 大小 = 4096
怎么了?如果我使用stat()
它sudo
给我Permission denied错误。这只发生在.gvfs
目录,其权限为 500 (dr-x------)。如果sudo
无法阅读stat()
,为什么它可以使用nftw()
?:|