C 编程:ls 函数按文件、可执行文件和目录排序
Posted
技术标签:
【中文标题】C 编程:ls 函数按文件、可执行文件和目录排序【英文标题】:C Programming: ls function sort by file, executable and directory 【发布时间】:2019-01-25 19:29:41 【问题描述】:到目前为止,我已经可以按“文件”和“目录”进行排序,但不知道如何检查它是否是“可执行文件”。
我正在考虑将我的 CWD 与“/”和 d_name 连接并将其存储到一个变量中,然后使用 access() 进行检查。但我不知道如何。
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<dirent.h>
#include<unistd.h>
int main(int argc,char **argv)
char *buf;
char cwd[PATH_MAX+1];
//Print the PWD
getcwd(cwd,100);
printf("Current Directory: %s \n",cwd);
//Print the Directory Listing
printf("***Directory Listing as follows***\n");
struct dirent **namelist;
int n;
if(argc < 1)
exit(EXIT_FAILURE);
else if (argc == 1)
n=scandir(".",&namelist,NULL,alphasort);
else
n = scandir(argv[1], &namelist, NULL, alphasort);
if(n < 0)
perror("scandir");
exit(EXIT_FAILURE);
else
while (n--)
if(namelist[n]->d_name[0] !=46) /*Exclude d_name starts with "." (ASCII) */
if(namelist[n]->d_type ==DT_REG) /*Check whether it's REGULAR FILE*/
/*if( access(path_and_name,X_OK) != 1 )
printf("Executable, \n %s \n",cwd);
*/
printf("File: ");
if(namelist[n]->d_type ==DT_DIR) /*Check whether it's DIRECTORY*/
printf("Directory: ");
printf("%s\n",namelist[n]->d_name);
free(namelist[n]);
free(namelist);
exit(EXIT_SUCCESS);
【问题讨论】:
if (access(namelist[n]->d_name, X_OK) != -1)
不适合您吗?当你尝试它时发生了什么?
【参考方案1】:
您可以使用stat
来执行此操作。您必须使用S_IXUSR
来检查文件是否具有执行权限。 stat
man page 将为您提供更多信息。
if (stat(file, &sb) == 0 && sb.st_mode & S_IXUSR)
/* executable */
else
/* non-executable */
【讨论】:
以上是关于C 编程:ls 函数按文件、可执行文件和目录排序的主要内容,如果未能解决你的问题,请参考以下文章