主函数源码

主函数流程
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 }                      

猜你喜欢

转载自blog.csdn.net/flf1234567898/article/details/106709611