Я этот код: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;
}
}
Если я исполню это нормально, она возвращает так же, как функция стата():
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. –
Кстати, вам не нужно добавлять '\\ 0' в строки C самостоятельно. – Hasturkun
Полезно знать @Hasturkun. Спасибо за совет! (Я новичок в C) –