Привет, я хочу сделать программу в c, которая получает имя каталога в качестве аргумента, показывает все файлы в нем и их разрешения в формате rwx, вот код:Как пройти через каталог в c и распечатать все имена и разрешения файлов
DIR* midir;
if ((midir=opendir(argv[1])) < 0) {
perror("\nError en opendir\n");
exit(-1);
}
struct dirent* info_archivo;
struct stat fileStat;
while ((info_archivo = readdir(midir)) != NULL) {
stat(info_archivo->d_name, &fileStat);
printf((S_ISDIR(fileStat.st_mode)) ? "d" : "-");
printf((fileStat.st_mode & S_IRUSR) ? "r" : "-");
printf((fileStat.st_mode & S_IWUSR) ? "w" : "-");
printf((fileStat.st_mode & S_IXUSR) ? "x" : "-");
printf((fileStat.st_mode & S_IRGRP) ? "r" : "-");
printf((fileStat.st_mode & S_IWGRP) ? "w" : "-");
printf((fileStat.st_mode & S_IXGRP) ? "x" : "-");
printf((fileStat.st_mode & S_IROTH) ? "r" : "-");
printf((fileStat.st_mode & S_IWOTH) ? "w" : "-");
printf((fileStat.st_mode & S_IXOTH) ? "x" : "-");
printf("\n\n");
}
closedir(midir);
выход это неправильно получает файлы имя правильно, но разрешения неправильно:
..: permissions: drwxr-xr-x
file1: permissions: drwxr-xr-x
file3: permissons: drwxr-xr-x
.: permissions: drwxr-xr-x
file2: permissions: drwxr-xr-x
Помощь ценится.
И какими будут * фактические * разрешения? –
Привет, они одинаковы для трех файлов: -rw-rw-r-- – Mustapha
Вы запрашиваете 'stat' файла в текущем рабочем каталоге, а не в вашем' midir'. Если вы проверили возвращаемое значение 'stat', вы бы это заметили. (О, и поэтому 'fileStat' не изменяется, поэтому вы получаете тот же« результат »снова и снова.) – usr2564301