主函数流程
1:参数检查。参数个数不能少于两个,如果参数个数大于等于两个,依次列出所有参数信息。
2:检测指定参数的文件是否存在,如果存在,读取文件属性,如果是普通文件,列读文件属性
3:如果是目录文件,循环查找目录下的文件,采用简单的插入排序构建按序链表,并读取各文件信息,然后列出整个链表文件的所有信息。
来看源码
struct stat stat_info;
22 if(stat(argv[i],&stat_info) == -1)
23 {
24 perror("stat");
E> 25 exit(EXIT_FAILURE);
26 }
27 if(S_ISRGE(stat_info.st_mode)) 9
28 {
E> 29 struct fnode *temp = (struct fnode*) malloc (sizeof(struct fnode));
30 if(temp == NULL)
31 {
1: sourcemain.c ? ? ?? buffers
32 perror("malloc");
E> 33 exit(EXIT_FAILURE);
34 }
35 temp->next = NULL;
E> 36 memset(temp->name,'\0',NAME_SIZE);
E> 37 memcpy(temp->name,argv[i],strlen(argv[i]));
E> 38 linklist = insert_list(temp,linklist);
E> 39 output_info(linklist);
40 }
41 else if(S_ISDIR(stat_info.st_mode))
42 {
E> 43 char buf[NAME_SIZE];
44 getcwd(buf,128);
E> 45 DIR *dirp = NULL;
E> 46 dirp = opendir(argv[i]);
47 if(dirp == NULL)
48 {
49 perror("opendir");
E> 50 exit(EXIT_FAILURE);
51 }
52 struct dirent *entp = NULL;
53 while(entp = readdir(dirp))
54 {
E> 55 struct fnode *temp = (struct fnode *)malloc(sizeof(struct fnode));
56 if(temp == NULL)
57 {
58 perror("malloc");
E> 59 exit(EXIT_FAILURE);
60 }
61 temp->next = NULL;
E> 62 memset(temp->name,'\0',NAME_SIZE);
E> 63 memcpy(temp->name,entp->d_name,strlen(entp->d_name));
64 linklist = insert_list(temp ,linklist);
65 }
66 chdir(argv[i]);
67 close(dirp);
68 output_info(linklist);
69 chdir(buf);
70 }
71 free_list(linklist);
72 }
73 return 1;
74 }