简单,不易于使用的myls

    main.c 文件
  1 #include <stdio.h>
  2 #include <string.h>
  3 #include <stdlib.h>
  4 #include <glob.h>
  5 #include <error.h>
  6 #include <dirent.h>
  7 #include "myls.h"
  8
  9 void stat_attbute(struct stat *buf);
 10  int is_not_dir(char *name);
 11
 12 int main(int argc, char **argv)
 13 {
 14     int ch = 0;
 15     struct stat buf;
 16     char path[1024];
 17     DIR *dp = NULL;
 18     struct dirent * ret;
 19
 20     char *optstring = "-lia";
 21
 22     while(ch != -1)
 23     {
 24         ch = getopt(argc, argv, optstring);
 25
 26         if(argv[1] == NULL && ch == -1)
 27         {
 28                 ch = ‘m‘;
 29                 strcpy(path, ".");
 30         }
 31         else
 32             if(ch == 1)
 33
 34                 strcpy(path,argv[optind - 1]);
 35
 36         dp = opendir(path);
 37
 38
 39         switch(ch)
 40         {
 41
 42             case ‘l‘:
 43                 while(1)
 44                 {
 45                     ret = readdir(dp);
 46                     if(ret == NULL)
 47                     {
 48                         if(ret)
 49                         {
 50                             perror("readdir()");
 51                             closedir(dp);
 52                         }
 53                         break;
 54                     }
 55                     if(!is_not_dir(ret->d_name))
 56                         continue;
 57
 58                     if(stat(ret->d_name, &buf))
 59                     {
 60                         perror("stat()");
 61                         closedir(dp);
 62                     }
 63                     stat_attbute(&buf);
 64                     printf("%s\n",ret->d_name);
 65                 }
 66                 break;
 67             case ‘i‘:
 68                 while(1)
 69                 {
 70                     ret = readdir(dp);
 71                     if(ret == NULL)
 72                     {
 73                         if(ret)
 74                         {
 75                             perror("readdir()");
 76                             closedir(dp);
 77                         }
 78                         break;
 79                     }
 80                      if(!is_not_dir(ret->d_name))
 81                          continue;
 82                     if(stat(ret->d_name, &buf))
 83                     {
 84                         perror("stat()");
 85                         closedir(dp);
 86                         return -1;
 87                     }
 88                     stat_ino(&buf);
 89                     printf("%s\n",ret->d_name);
 90                 }
 91                 break;
 92
 93             case ‘a‘:
 94                 while(1)
 95                 {
 96                     ret = readdir(dp);
 97                     if(ret == NULL)
 98                     {
 99                         if(ret)
100                         {
101                             perror("readdir()");
102                             closedir(dp);
103                         }
104                         break;
105                     }
106                     printf("%10s  ",ret->d_name);
107                 }
108                     break;
109
110             case ‘m‘:
111                 while(1)
112                 {
113                     ret = readdir(dp);
114                     if(ret == NULL)
115                     {
116                         if(ret)
117                         {
118                             perror("readdir()");
119                             closedir(dp);
120                         }
121                         break;
122                     }
123                      if(!is_not_dir(ret->d_name))
124                          continue;
125                     printf("  %s",ret->d_name);
126                 }
127                 ch = -1;
128                 break;
129
130             case ‘?‘:
131                 printf("没有此选项%s\n",argv[optind - 1]);
132                 break;
133             default:
134                 break;
135         }
136
137     }
138
139
140
141     return 0;
142 }
143
144 void stat_attbute(struct stat *buf)
145 {
146
147     stat_file(buf);//文件类型
148     stat_mode(buf);//文件权限
149     stat_link(buf);//hard link
150     stat_usr(buf);//文件用户名
151     stat_gup(buf);//文件组用户名
152     stat_byte(buf);//文件字节大小
153     stat_time(buf);//文件最后保存时间
154
155 }
156
157 int is_not_dir(char *name)
158 {
159
160     if(name[0] == ‘.‘)
161         return 0;
162
163     return 1;
164 }
165
166 

           myls.h文件
  1 #ifndef __MYLS_H
  2 #define __MYLS_H
  3 #include <sys/types.h>
  4 #include <sys/stat.h>
  5 #include <fcntl.h>
  6 #include <unistd.h>
  7 #include <time.h>
  8 #include <grp.h>
  9 #include <pwd.h>
 10 void stat_file(struct stat *buf);//文件类型
 11 void stat_mode(struct stat *buf);//文件权限
 12 void stat_link(struct stat *buf);//hard link
 13 void stat_usr(struct stat *buf);//文件用户名
 14 void stat_gup(struct stat *buf);//文件组用户名
 15 void stat_byte(struct stat *buf);//文件字节大小
 16 void stat_time(struct stat *buf);//文件最后保存时间
 17 void stat_ino(struct stat *buf);//ino
 18 #endif

                   myls.c文件
  1 #include <stdio.h>
  2 #include "myls.h"
  3 void stat_file(struct stat *buf)//文件类型
  4 {
  5
  6     switch(buf->st_mode & S_IFMT)
  7     {
  8         case S_IFIFO :
  9             printf("p");
 10             break;
 11
 12         case S_IFCHR :
 13             printf("c");
 14             break;
 15
 16         case S_IFDIR :
 17             printf("d");
 18             break;
 19
 20         case S_IFBLK :
 21             printf("b");
 22             break;
 23         case S_IFREG :
 24             printf("-");
 25             break;
 26         case S_IFLNK :
 27             printf("l");
 28             break;
 29         case S_IFSOCK :
 30             printf("s");
 31             break;
 32     }
 33
 34
 35 }
 36 void stat_mode(struct stat *buf)//文件权限
 37 {
 38     if(buf->st_mode & S_IRUSR)
 39         printf("r");
 40     else
 41         putchar(‘-‘);
 42
 43     if(buf->st_mode & S_IWUSR)
 44         printf("w");
 45     else
 46         putchar(‘-‘);
 47
 48     if(buf->st_mode & S_IXUSR)
 49         printf("x");
 50     else
 51         putchar(‘-‘);
 52
 53     if(buf->st_mode & S_IRGRP)
 54         printf("r");
 55     else
 56         putchar(‘-‘);
 57
 58     if(buf->st_mode & S_IWGRP)
 59         printf("w");
 60     else
 61         putchar(‘-‘);
 62
 63     if(buf->st_mode & S_IXGRP)
 64         printf("x");
 65     else
 66         putchar(‘-‘);
 67
 68     if(buf->st_mode & S_IROTH)
 69         printf("r");
 70     else
 71         putchar(‘-‘);
 72
 73     if(buf->st_mode & S_IWOTH)
 74         printf("w");
 75     else
 76         putchar(‘-‘);
 77
 78     if(buf->st_mode & S_IWOTH)
 79         printf("x");
 80     else
 81         putchar(‘-‘);
 82         putchar(‘ ‘);
 83 }
 84 void stat_link(struct stat *buf)//hard link
 85 {
 86     printf("%ld ", buf->st_nlink);
 87 }
 88 void stat_usr(struct stat *buf)//文件用户名
 89 {
 90     struct passwd *pwd = NULL;
 91
 92     pwd = getpwuid(buf->st_uid);
 93
 94     printf("%s ",pwd->pw_name);
 95
 96 }
 97 void stat_gup(struct stat *buf)//文件组用户名
 98 {
 99     struct group *gnam = NULL;
100
101     gnam = getgrgid(buf->st_gid);
102
103     printf("%s ",gnam->gr_name);
104
105 }
106 void stat_byte(struct stat *buf)//文件字节大小
107 {
108     printf("%ld ",buf->st_size);
109
110 }
111 void stat_time(struct stat *buf)//文件最后保存时间
112 {
113     struct tm *times;
114     char buff[1024];
115
116     times = localtime(&buf->st_mtim.tv_sec);
117
118     strftime(buff, 1024, "%m月  %d %H:%M", times);
119     printf("%s ",buff);
120 }
121 void stat_ino(struct stat *buf)//ino
122 {
123     printf("%ld  ",buf->st_ino);
124 }
~       

原文地址:https://www.cnblogs.com/APUEsocket/p/10541511.html

时间: 2024-08-02 01:03:37

简单,不易于使用的myls的相关文章

Android简单Socket通信demo

一.Android Socket 通信简介 Android与服务器的通信方式主要有两种,一是Http通信,一是Socket通信.两者的最大差异在于,http连接使用的是“请求—响应方式”,即在请求时建立连接通道,当客户端向服务器发送请求后,服务器端才能向客户端返回数据.而Socket通信则是在双方建立起连接后就可以直接进行数据的传输,在连接时可实现信息的主动推送,而不需要每次由客户端想服务器发送请求. 那么,什么是socket?Socket又称套接字,在程序内部提供了与外界通信的端口,即端口通信

Report Machine(RM)报表控件简单用法-delphi

RM(Report Machine)是一个功能强大的Delphi报表控件包.使用它可以制作出非常复杂的报表.下面讲述最简单的用法: 在Form上放上两个数据库控件:ADOConnection和ADOQuery设置好ADOConnection的ConnectionString.LoginPrompt=False.ADOQuery的Connection指向ADOConnection.ADOQuery的SQL设置好数据查询语句. 在Form上放上两个RM报表控件:RMDBDataSet和RMRepor

WCF服务二:创建一个简单的WCF服务程序

在本例中,我们将实现一个简单的计算服务,提供基本的加.减.乘.除运算,通过客户端和服务端运行在同一台机器上的不同进程实现. 一.新建WCF服务 1.新建一个空白解决方案,解决方案名称为"WCFSolution". 2.解决方案右键->添加->类库项目,类库名称为CalculateWcfService. 3.创建服务契约 WCF采用基于契约的交互方式实现了服务的自制.服务契约:是相关操作的集合.契约就是双方或多方就某个关注点达成的一种共识,是一方向另一方的一种承诺.签署了某个

openstack(liberty):部署实验平台(二,简单版本软件安装 part1)

软件安装过程中,考虑到现在是一个实验环境,且也考虑到规模不大,还有,网络压力不会大,出于简单考虑,将各个节点的拓扑结构改了一下,主要体现在网络节点和控制节点并在了一起.在一个服务器上安装! 到目前位置,我的这个平台,只有keystone,glance,neutron,dashboard以及nova几个服务.省出的那个服务器,打算也作为计算节点.所以,最新规划topo如下了: 绿色节点表示目前已经安装了openstack的模块软件,灰色部分,表示下一步即将安装的部分. 下面简要说下安装的过程,重点

tcp_wrapper:简单的基于主机的访问控制工具

一.常用的主机访问控制工具 独立(stand alone)守护进程(httpd,vsftpd).瞬时(transient)守护进程(rsync,tftp,telnet), 这两类守护进程都支持基于iptables进行控制.哪一端口运行客户端访问,哪一端口不允许客户端访问,基于主机做防火墙时,都能进行控制. 做主机防火墙时,有些瞬时守护进程,甚至是某些独立独立守护进程,还能够接受另一种方式,tcp_wrapper,来控制. 在众多的基于主机的安全访问控制中,tcp-wrapper是简单而易于配置的

一个简单的HTTP测试工具:Send HTTP Tool

我们在调用或者测试测试HTTP协议,或者第三方系统公布的RESTFul Web服务的API的时候,可以有很多种方法,比如,自己在cmd行中,打开telnet,然后拼写HTTP的数据:或者用Fiddler2发送HTTP请求的数据:还有其他方式:直接用telnet命令,拼写HTTP的数据很不方便,而且很容易出错:Fiddler2虽然功能强大,但是个人感觉使用起来有点稍微复杂,特别是对初学者来说.那么有没有一个简单,易于使用,一看就能知道如何使用的发送HTTP请求数据的工具呢?在这个篇文章中,为给大家

从SDN鼻祖Nicira到VMware NSX 网络虚拟化平台的简单探讨

以前的大二层技术,一般是在物理网络底层使用IS-IS路由技术,再在此基础之上,实现数据中心网络的二层扩展,如公有的Trill.SPB技术和Cisco私有的OTV.Fabricpath技术:前沿一些的网络虚拟化技术,使用了VXLAN.NVGRE等协议,突破VLAN和MAC的限制,将数据中心的大二层网络扩展的更大.而使用VMware NSX,则更进一步--我们可以对网络提供已对计算和存储实现的相同虚拟化功能.就像服务器虚拟化可以通过编程方式创建.删除和还原基于软件的虚拟机以及拍摄其快照一样,NSX网

unity Dotween插件的简单介绍及示例代码

unity里面做插值动画的插件有许多,比较常见的有itween.hotween.dotween.根据大家的反馈和实际体验来说,dotween插件在灵活性.稳定性.易用性上都十分突出.这里简单介绍下它的用法,并在后文做了一些效果示例,还是不错的. 所谓"插值动画",顾名思义就是在两个值中插入其他的值来实现动画.原理非常简单,比如想让某个物体从A地到达B地,我们只知道A和B的坐标,插值动画就可以根据"缓动函数"确定A.B间的其他值,来实现物体从A到B的"运动过

搭建一个简单的mybatis框架

一.Mybatis介绍 MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录. 1.Mybatis实现了接口绑定,使用更加方便. 在ibatis2.x中我们需要在DAO的实现类中指定具体对应哪个xml映射文件, 而Myb