主函数源码

主函数流程
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 }                      
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值