在C中枚举可执行文件

时间:2015-06-18 00:52:29

标签: c unix directory ansi

我试图仅枚举执行(+ x)​​位设置的文件。我的代码似乎列出了所有文件。它似乎也枚举了我不想要的目录和上面的目录。例如:

..
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;
}

提前致谢

1 个答案:

答案 0 :(得分:1)

$('a[href*=#]:not([href=#]):not([href=#myCarousel]):not([href="#myCarousel2])"').click(function() { //^^^^^^^^^^^^^Add this }); 仅包含目录条目的相对路径名。因此,在调用ep->d_name

之前,您应将当前工作目录更改为/tmp/hi
stat(2)

如@Andrew Medico的评论中所述,请删除if (chdir("/bin") != 0) { perror("chdir()"); exit(EXIT_FAILURE); } /* ... */ if (stat(ep->d_name, &sb) == -1) { perror("stat()"); exit(EXIT_FAILURE); } 行末尾的额外;,以避免不必要地打印if行。

puts()在到达目录末尾时返回readdir()指针,因此您应该按如下方式重写while循环,以便抑制编译器警告:

NULL

为了避免打印while (NULL != (ep = readdir(dp))) { /* loop */ } .,请在..正文中使用if这样的条件:

while

同样,您可以使用if ((strcmp(ep->d_name, ".") == 0) || (strcmp(ep->d_name, "..") == 0)) continue; if ((stat(ep->d_name, &sb) >= 0) && (sb.st_mode > 0) && (S_IEXEC & sb.st_mode)) if (!S_ISDIR(sb.st_mode)) puts(ep->d_name); 宏来查明当前条目是否是目录并选择不打印它。