私はこのコードを持っています:
#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
、許可拒否エラーが発生します。これは.gvfs
、権限が500(dr-x ------)のディレクトリでのみ発生します。sudo
で読めないのならstat()
、なぜそれがうまくいくのnftw()
ですか?:|