#include<stdio.h> #include<dirent.h> int main(int argc,char*argv[]) { DIR *dp=NULL; struct dirent *dirp=NULL; if(2!=argc) { printf("usage:is directory_name\n"); } if(NULL==(dp==opendir(argv[1]))) { printf("can't open %s\n",argv[1]); } while(NULL!=(dirp==readdir(dp))) { printf("%s\n",dirp->d_name); } closedir(dp); return 0; }怎么调用这个代码
时间: 2024-03-11 08:49:32 浏览: 47
这个程序是一个命令行程序,需要在命令行中输入相应的参数来运行。
假设你已经将该程序保存为名为 `listdir.c` 的文件,使用以下命令编译该程序:
```bash
gcc listdir.c -o listdir
```
其中,`gcc` 是编译器,`listdir.c` 是源代码文件的名称,`-o listdir` 表示将编译后的可执行文件命名为 `listdir`。
编译成功后,可以使用以下命令来运行该程序:
```bash
./listdir directory_name
```
其中,`directory_name` 是要列出文件的目录名称,需要替换为实际的目录名称。例如,要列出当前目录下的所有文件,可以使用以下命令:
```bash
./listdir .
```
运行结果将会输出当前目录下的所有文件名称。
相关问题
#include <stdio.h> #include <string.h> #include <stdlib.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <unistd.h> #include <stdbool.h> #include <sys/mman.h> #include <linux/input.h> #include <errno.h> #include <dirent.h> //设置节点 struct node { char *data; struct node *next; struct node *prev; }; //初始化链表 struct node *list_init() { struct node *head = malloc(sizeof(struct node));//malloc时动态内存分配函数 head->next = head; head->prev = head; return head; } //创建新节点 struct node *newnode(char *newdata) { struct node *new = malloc(sizeof(struct node)); new->data = newdata; new->next = NULL; new->prev = NULL; } //加入新节点 int addnode(struct node *new,struct node *list) { struct node *p = list; while(p->next != list) { p = p->next; } new->prev = list->prev; new->next = list; list->prev = new; new->prev->next = new; } int main(int argc,char **argv) { struct node *list = list_init();//初始化双向循环链表 DIR *dp = opendir(argv[1]); //打开目录文件argv[1] struct dirent *p; while(p = readdir(dp)) //遍历目录文件 { if(p->d_type == DT_REG) { if(strstr(p->d_name,".bmp")) //判断是否为.bmp文件 { struct node *new = newnode(p->d_name); //创建新节点 addnode(new,list); //插入新节点 } } } }
这段代码是一段 C 语言代码,主要实现的功能是遍历指定目录中的所有 BMP 格式的文件,并将它们的文件名存储在一个双向循环链表中。这个链表的每个节点包含一个字符串,即 BMP 文件的文件名。在 main 函数中,先调用 list_init 函数初始化一个双向循环链表,然后调用 opendir 函数打开指定的目录文件,再通过 readdir 函数遍历该目录下的所有文件和子目录。对于每个文件,判断它是否是 BMP 格式的文件,如果是,则调用 newnode 函数创建一个新的节点,并将文件名存储在该节点中,最后调用 addnode 函数将该节点插入到双向循环链表中。
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <dirent.h> #include <unistd.h> #include <sys/types.h> #include <sys/stat.h> #include <pwd.h> #include <grp.h> #include <time.h> void shell_ls_l(char *file,struct stat st) { char limi
ted[11]; // 文件权限 mode_t mode = st.st_mode; limitted[0] = (S_ISDIR(mode)) ? "d" : "-"; limitted[1] = (mode & S_IRUSR) ? "r" : "-"; limitted[2] = (mode & S_IWUSR) ? "w" : "-"; limitted[3] = (mode & S_IXUSR) ? "x" : "-"; limitted[4] = (mode & S_IRGRP) ? "r" : "-"; limitted[5] = (mode & S_IWGRP) ? "w" : "-"; limitted[6] = (mode & S_IXGRP) ? "x" : "-"; limitted[7] = (mode & S_IROTH) ? "r" : "-"; limitted[8] = (mode & S_IWOTH) ? "w" : "-"; limitted[9] = (mode & S_IXOTH) ? "x" : "-"; limitted[10] = '\0'; printf("%s ", limitted); // 链接数、所有者、所在组、文件大小、创建时间、文件名 printf("%ld ", (long)st.st_nlink); printf("%s ", getpwuid(st.st_uid)->pw_name); printf("%s ", getgrgid(st.st_gid)->gr_name); printf("%lld ", (long long)st.st_size); char time_buf[20]; strftime(time_buf, 20, "%b %d %H:%M", localtime(&st.st_ctime)); printf("%s ", time_buf); printf("%s\n", file); } int main(int argc, char *argv[]) { DIR *dir; struct dirent *ptr; struct stat st; char path[256]; if (argc == 1) { getcwd(path, 256); dir = opendir(path); while ((ptr = readdir(dir)) != NULL) { if (ptr->d_name[0] == '.') continue; stat(ptr->d_name, &st); shell_ls_l(ptr->d_name, st); } } else if (argc == 2) { if (strcmp(argv[1], "-l") == 0) { getcwd(path, 256); dir = opendir(path); while ((ptr = readdir(dir)) != NULL) { if (ptr->d_name[0] == '.') continue; stat(ptr->d_name, &st); shell_ls_l(ptr->d_name, st); } } else { dir = opendir(argv[1]); while ((ptr = readdir(dir)) != NULL) { if (ptr->d_name[0] == '.') continue; sprintf(path, "%s/%s", argv[1], ptr->d_name); stat(path, &st); shell_ls_l(ptr->d_name, st); } } } else if (argc == 3) { if (strcmp(argv[1], "-l") == 0) { dir = opendir(argv[2]); while ((ptr = readdir(dir)) != NULL) { if (ptr->d_name[0] == '.') continue; sprintf(path, "%s/%s", argv[2], ptr->d_name); stat(path, &st); shell_ls_l(ptr->d_name, st); } } } return 0; }
这是一个简单的实现Linux命令ls -l的程序,可以列出文件的权限、链接数、所有者、所在组、文件大小、创建时间、文件名等信息。
阅读全文