J'ai ce code:C: comportement étrange avec 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;
}
}
Si je l'exécute normalement, il retourne la même manière que la fonction stat():
mode = 16704 (S_IFDIR | S_IRUSR | S_IXUSR) size = 0
Mais quand Je l'exécute avec sudo
, il renvoie ceci:
mode = 16832 (S_IFDIR | S_IRWXU) size = 4096
Que se passe-t-il? Si j'utilise stat()
avec sudo
il me donne l'erreur Permission refusée. Cela se produit uniquement avec le répertoire .gvfs
, dont les autorisations sont 500 (dr-x ------). Si sudo
ne peut pas lire avec stat()
, pourquoi cela fonctionne-t-il avec nftw()
? : |
Quelles sont les protections du répertoire/home/pf? Cela contrôle ce que vous voyez, pas le masque d'autorisation sur le répertoire .gvfs lui-même. –
btw, vous n'avez pas besoin d'ajouter '\\ 0' aux chaînes C vous-même. – Hasturkun
Bon à savoir @Hasturkun. Merci pour le conseil! (Je suis nouveau en C) –