Я пытаюсь перечислить только файлы с установленным битом execute (+ x). Мой код, кажется, перечисляет все файлы. Кажется, он также перечисляет каталог и указанный выше каталог, который мне не нужен. Пример:Перечисление исполняемых файлов в C
..
should_not_be_executable.sh
.
Есть ли способ фильтровать '..' и '.' без strstr()? Вот мой код
#include <stdio.h>
#include <sys/types.h>
#include <dirent.h>
#include <sys/stat.h>
#include <unistd.h>
int
main (void)
{
DIR *dp;
struct dirent *ep;
dp = opendir ("/tmp/hi");
if (dp != NULL)
{
while (ep = readdir (dp))
{
struct stat sb;
if ((stat(ep->d_name, &sb) >= 0) && (sb.st_mode > 0) && (S_IEXEC & sb.st_mode));
puts(ep->d_name);
}
(void) closedir (dp);
}
else
perror ("Couldn't open the directory");
return 0;
}
Заранее спасибо
не думаю. См. [Readdir] (http://pubs.opengroup.org/onlinepubs/7908799/xsh/readdir.html) – Dinesh
ОК - но есть идеи, почему в моем коде также отображаются неисполняемые файлы? – user3526827
У вас есть опечатка - бродячая ';' в конце вашей строки 'if'. Это означает, что 'if' не имеет тела, а строка' puts' выполняется для каждой итерации цикла. –