首页 技术 正文
技术 2022年11月21日
0 收藏 632 点赞 2,888 浏览 3656 个字
#include<stdio.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<time.h>
#include<pwd.h>
#include<grp.h>
#include<dirent.h>
#include<errno.h>
#include<string.h>
#include<stdlib.h>
int l_stat(char * p1,char * p);
void a_stat(char * p);
void i_stat(char * p);
void e_dir(char * p);
static long numbers;
//判断是否隐藏文件
int is_spot(const char * p)
{
if(*p == '.')
return ;
else
return ;
}
void e_dir(char * p)
{
struct stat mystat;
DIR * dir;
struct dirent * pd;
int cent = lstat(p,&mystat);
if((mystat.st_mode & S_IFMT) == S_IFDIR)
{
dir = opendir(p);
if(dir == NULL)
{
if(errno)
{
perror("opendir()");
return;
}
}
while()
{
pd = readdir(dir);
if(pd == NULL)
{
if(errno)
{
perror("readdir()");
return ;
}
break;
}
l_stat(p,pd->d_name);
}
closedir(dir);
}
else
l_stat(".",p);
printf("%ldk\n",numbers/);
return ;
}
void h_stat(char * p)
{
struct stat mystat;
DIR * dir;
struct dirent * pd;
int cent = stat(p,&mystat);
if((mystat.st_mode & S_IFMT) == S_IFDIR)
{
dir = opendir(p);
if(dir == NULL)
{
if(errno)
{
perror("opendir()");
return;
}
}
while()
{
pd = readdir(dir);
if(pd == NULL)
{
if(errno)
{
perror("readdir()");
return ;
}
break;
}
if(is_spot(pd->d_name) == )
printf("%s \n",pd->d_name);
}
closedir(dir);
}
else
printf("%s \n",p);
return;
}
int main(int argc,char ** argv)
{
if(argc < )
return ;
char * op = "-laih";
int s;
while()
{
s = getopt(argc,argv,op);
if(s == -)
break;
switch(s)
{
case 'l':e_dir(argv[]); break;
case 'a':a_stat(argv[]);break;
case 'i':i_stat(argv[]);break;
case 'h':h_stat(argv[]);break;
case '?':printf("无该选项\n");break;
// case 1 : printf("%s\n",argv[2]);break;
default:break;
}
}
return ;
}
void i_stat(char * p)
{
struct stat mystat;
int nodenumber;
DIR * dir;
struct dirent * pd;
int cent = stat(p,&mystat);
if((mystat.st_mode & S_IFMT) == S_IFDIR)
{
dir = opendir(p);
if(dir == NULL)
{
if(errno)
{
perror("opendir()");
return;
}
}
while()
{
pd = readdir(dir);
if(pd == NULL)
{
if(errno)
{
perror("readdir()");
return ;
}
break;
}
if(is_spot(pd->d_name) == )
{
printf("%ld ",pd->d_ino);
printf("%s\n",pd->d_name);
}
}
closedir(dir);
}
else
{
printf("%ld ",mystat.st_ino);
printf("%s\n",p);
}
}
void a_stat(char * p)
{
struct stat mystat;
DIR * dir;
struct dirent * pd;
int cent = stat(p,&mystat);
if((mystat.st_mode & S_IFMT) == S_IFDIR)
{
dir = opendir(p);
if(dir == NULL)
{
if(errno)
{
perror("opendir()");
return;
}
}
while()
{
pd = readdir(dir);
if(pd == NULL)
{
if(errno)
{
perror("readdir()");
return ;
}
break;
}
printf("%s ",pd->d_name);
}
}
else
printf("%s ",p);
}
// 追加/获得路径
char * dir_cat(const char * p,const char * buf)
{
char * buf_cat = malloc();
memset(buf_cat,'\0',);
strcpy(buf_cat,p);
buf_cat[strlen(buf_cat)] = '/';
strcat(buf_cat,buf);
return buf_cat;
}
//获取文件属性
int l_stat(char * p,char * p_name)
{
struct tm * tmp = NULL;
struct passwd * pwd = NULL;
struct group * wd = NULL;
struct stat mystat;
char buf[];
char * p1;
int cnt;
p1 = dir_cat(p,p_name);
cnt = stat(p1,&mystat);
if(cnt == -)
{
perror("stat()");
return -;
}
//判断是不是隐藏文件
if(is_spot(p_name) == )
{
numbers += mystat.st_blocks;
switch(mystat.st_mode & S_IFMT)
{
case S_IFREG: putchar('-');break;
case S_IFBLK: putchar('b');break;
case S_IFDIR: putchar('d');break;
case S_IFCHR: putchar('c');break;
case S_IFIFO: putchar('p');break;
default:break;
}
//拥有者
if(mystat.st_mode & S_IRUSR)
putchar('r');
else
putchar('-');
if(mystat.st_mode & S_IWUSR)
putchar('w');
else
putchar('-');
if(mystat.st_mode & S_IXUSR)
putchar('x');
else
putchar('-');
//所属组
if(mystat.st_mode & S_IRGRP)
putchar('r');
else
putchar('-');
if(mystat.st_mode & S_IWGRP)
putchar('w');
else
putchar('-');
if(mystat.st_mode & S_IXGRP)
putchar('x');
else
putchar('-');
//其他
if(mystat.st_mode & S_IROTH)
putchar('r');
else
putchar('-');
if(mystat.st_mode & S_IWOTH)
putchar('w');
else
putchar('-');
if(mystat.st_mode & S_IXOTH)
putchar('x');
else
putchar('-');
//硬链接个数
printf("%2ld ",mystat.st_nlink);
//文件拥有者名字
pwd = getpwuid(mystat.st_uid);
printf("%s ",pwd->pw_name);
//文件所属组
wd = getgrgid(mystat.st_gid);
printf("%s ",wd->gr_name);
//总字节个数
printf("%5ld ",mystat.st_size);
//获取时间
tmp = localtime(&mystat.st_mtim.tv_sec);
strftime(buf,,"%m 月 %d %H:%M",tmp);
printf("%s ",buf);
//文件名
printf("%s\n",p_name);
}
return ;
}
相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:8,997
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,511
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,356
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,139
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,770
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,848