码迷,mamicode.com
首页 > 其他好文 > 详细

实现简单的 ls 命令

时间:2015-09-21 06:58:11      阅读:179      评论:0      收藏:0      [点我收藏+]

标签:

今天天气不错,实现个自己的 ls 命令玩玩,现在实现来 -l 参数,以后有空再把其他参数补全:)

 

 1 #include <stdio.h>
 2 #include <sys/types.h>
 3 #include <sys/stat.h>
 4 #include <dirent.h>
 5 #include <string.h>
 6 #include <pwd.h>
 7 #include <time.h>
 8 
 9 void showls(struct stat *p,char * d_name)
10 {
11     char flag;
12     if(S_ISREG(p->st_mode))flag=-;
13     else if(S_ISDIR(p->st_mode))flag=d;
14         else if(S_ISCHR(p->st_mode))flag=c;
15         else if(S_ISBLK(p->st_mode))flag=b;
16         else if(S_ISFIFO(p->st_mode))flag=P;
17         else if(S_ISLNK(p->st_mode))flag=l;                     
18     else flag=?;
19     printf("%c\t",flag);
20 
21     printf("%o\t",p->st_mode&0777);
22 
23     printf("%d\t",p->st_nlink);
24 
25     struct passwd *s;
26     s=getpwuid(p->st_uid);
27     printf("%s\t",s->pw_name);
28 
29     printf("%ld\t",p->st_size);
30 
31     char buf[100];
32     time_t t=p->st_mtime;
33     strftime(buf,sizeof(buf),"%F %T",localtime(&t));
34     printf("%s\t",buf);
35 
36     printf("%s\t",d_name);
37     printf("\n");
38 }
39 
40 int main(int argc,char* argv[])
41 {
42     char* path;
43     if(argc==1)
44         path=".";
45     if(argc==2)
46         path=argv[1];    
47     if(argc==3)
48         path=argv[2];
49 
50     if(argc>=2&&strcmp(argv[1],"-l")==0)
51     {    
52         if(strcmp(argv[1],"-l")==0&&argc==2)
53             path=".";
54         if(opendir(path)==NULL)
55         {
56             printf("文件打开失败!请正确输入!");
57             printf("%m");
58             return -1;
59         }
60         DIR *p = opendir(path);//指针指向当前路径的所有内容
61         chdir(path);
62         struct dirent *q;//结构体划分内容块
63         printf("类型\t权限\t链接数\t用户名\t字节数\t最后一次修改时间\t文件名\n");
64         while((q=readdir(p))!=NULL)
65         {
66             struct stat s;
67             stat(q->d_name,&s);
68             if(q->d_name[0]==.)
69                 continue;//不显示隐藏文件
70             showls(&s,q->d_name);
71         }
72         printf("\n");
73         closedir(p);
74         return 0;
75     }
76     if(opendir(path)==NULL)
77     {
78         printf("文件打开失败!请正确输入!");
79         printf("%m");
80         return -1;
81     }
82     DIR *p = opendir(path);
83     chdir(path);
84     struct dirent *q;
85     while((q=readdir(p))!=NULL)
86     {    
87         if(q->d_name[0]==.)
88             continue;//不显示隐藏文件
89         printf("%s\t",q->d_name);
90     }
91     printf("\n");
92     closedir(p);
93     return 0;
94 }

执行结果:

技术分享

实现简单的 ls 命令

标签:

原文地址:http://www.cnblogs.com/firstcxj/p/4825070.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!