实现简单的 ls 命令

今天天气不错,实现个自己的 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 }

执行结果:

时间: 2024-12-28 08:47:32

实现简单的 ls 命令的相关文章

使用linux-c编程实现简单的ls命令

使用Linux-c编程实现简单的ls命令 具体代码如下:     加载的头文件有stdio.h,sys/types.h,dirent.h,unistd.h,sys/stat.h,fcntl.h,string.h等. void main(int argc,char **argv){      DIR *dir;      struct dirent *rdir;      struct stat statbuf;      char * buffer="/";      char *fi

Linux系统编程_1_文件夹读取(实现简单ls命令)

闲来无事.随便写写,实现简单的ls命令: | 1 #include <stdio.h> | 2 #include <stdlib.h> | 3 #include <dirent.h> | 4 #include <string.h> | 5 | 6 int main(int argc, char **argv) | 7 { | 8 DIR *pDir; | 9 struct dirent *stDir; | 10 int flag = 0; | 11 | 12

Linux系统编程_1_目录读取实现简单ls命令

闲来无事,随便写写,实现简单的ls命令: | 1 #include <stdio.h> | 2 #include <stdlib.h> | 3 #include <dirent.h> | 4 #include <string.h> | 5 | 6 int main(int argc, char **argv) | 7 { | 8 DIR *pDir; | 9 struct dirent *stDir; | 10 int flag = 0; | 11 | 12

Linux下的 ls 命令的简单实现

又到了期末的时候,Linux实践课的老师挺厚道,布置了算是一个入门的大作业:实现一个简单版本的ls命令.三个文件,先上传再说. ls2.c #include <stdio.h> #include "ls_header.h" int main(int argc, char **argv) { // 处理参数, lsLong是带有 -l 参数的, lsShort为没有-l参数的ls命令 int i; if (argc == 1) { /* ls . */ lsShort(&qu

ls命令的20个实用范例

contents ls -l -h -lhS -l --block-size=M -a -d */ -g -G -n --color=never -i -p -r -R -t ls ~ ls --version ls是什么 ls命令用于列出文件和目录.默认上,他会列出当前目录的内容.带上参数后,我们可以用ls做更多的事情.这里是一些在日常操作中使用到的ls用法的示例. 1. 不带参数运行ls 不带参数运行ls会只列出文件或者目录.看不到其他信息输出(译注:有时候你发现无参数的ls命令和这里描述的

Linux下ls命令显示符号链接权限为777的探索

Linux下ls命令显示符号链接权限为777的探索 --深入ls.链接.文件系统与权限 一.摘要 ls是Linux和Unix下最常使用的命令之一,主要用来列举目录下的文件信息,-l参数允许查看当前目录下所有可见文件的详细属性,包括文件属性.所有者.文件大小等信息.但是,当其显示符号链接的属性时,无论其指向文件属性如何,都会显示777,即任何人可读可写可执行.本文从ls命令源码出发,由浅入深地分析该现象的原因,简略探究了Linux 4.10下的符号链接链接.文件系统与权限的源码实现. 关键词:Li

ls命令--Linux命令应用大词典729个命令解读

内容来源于人民邮电出版社<Linux命令应用大词典> 讲述729个命令,1935个例子 学习Linux系统的参考书.案头书,遇到不懂的命令或命令选项一查即可 争取每天都发布内容 ls命令 使用ls命令,对于目录而言将列出其中的所有子目录与文件信息:对于文件而言将输出其文件名以及所要求的其它信息.    命令语法: ls [选项] [目录|文件] 命令中各选项的含义如表所示. 表                                    ls命令选项含义 选项 含义 -a 显示指定目

Windows中用“ls”命令

解决办法是: 在C:\Windows\System32目录下新建文本文档,文件内容为: @echo off dir 另存为“ls.bat” 类型为所有文件,编码ANSI 可使用dir 或者ls都可以 经常切换于Windows与Linux之间的用户可能都面临一个问题——二者的一些命令是不同的,有时候很容易弄混了,比如Windows下列出目录中的文件与文件夹用命令“dir”,但是在Linux下却是用“ls”的. 解决这个问题在Linux下可以用“alias”建立别名来使用Windows下的命令,例如

ls命令的理解

ls注意只是显示文件的大小,不是占用磁盘空间,这句话主要是针对文件夹的,ls只是统计目录结构中文件夹结点的大小,而不是文件夹下所有文件的大小,统计文件夹下所有文件的总和,使用du命令,具体参考:http://blog.csdn.net/ysdaniel/article/details/6922055 du --max-depth=1,该命令可以查看当前文件夹的大小信息. ll相当于ls -l,l.只显示隐藏的文件和目录,比如"."和".." 解释:文件修改时间,文件