/*************************************/
程序功能:Linux系统下文件信息的获取———————LS
姓名:王恩博
日期:2015.6.1
使用方法简述:对控制台下输入不同的命令行参数的个数以及内容让程序做出不同的处理方式
./ls 直接读取出当前根目录内非隐藏文件的名称
./ls -a读取出当前根目录下所有文件的名称
./ls -l 读取出当前根目录内非隐藏文件的名称以及属性
./ls -al 读取出当前根目录内所有文件的名称以及属性
./ls /root/**/ 读取指定目录下非隐藏文件的名称
./ls -a /root/**/ 读取指定目录下所有文件的名称
./ls -l /root/**/ 读取指定目录下非隐藏文件的名称以及属性
./ls -al /root/**/读取指定目录下所有文件的名称以及属性
/****************************************/
#include<sys/types.h>
#include<dirent.h>
#include<stdio.h>
#include<sys/stat.h>
#include<unistd.h>
#include<string.h>
#include<time.h>
int main(int argc,char **argv)
{
DIR* ptr=NULL;
char time[40]={'\0'};
int i=0;
struct dirent* dir=NULL;
struct stat st;
char dir_name[40]={'\0'};
/**************************************/
//./ls
if(argc==1&&strcmp(argv[0],"./ls")==0)
{
ptr=opendir("./");
while((dir=readdir(ptr))!=NULL)
{
strcpy(dir_name,dir->d_name);
if(dir_name[0]!='.')
printf("%s \n",dir->d_name);
memset(dir_name,0,40);
}
closedir(ptr);
}
/***************************************/
//./ls -a
if(argc==2&&strcmp(argv[0],"./ls")==0&&strcmp(argv[1],"-a")==0)
{
ptr=opendir("./");
while((dir=readdir(ptr))!=NULL)
{
strcpy(dir_name,dir->d_name);
printf("%s \n",dir->d_name);
}
closedir(ptr);
}
/**************************************/
//./ls -al
else if(argc==2&&strcmp(argv[0],"./ls")==0&&strcmp(argv[1],"-al")==0)
{
ptr=opendir("./");
while((dir=readdir(ptr))!=NULL)
{
stat(dir->d_name,&st);
if(S_ISREG(st.st_mode))
printf("-");
else if(S_ISDIR(st.st_mode))
printf("d");
else
printf("o");
if(st.st_mode&S_IRUSR)
printf("r");
else
printf("-");
if(st.st_mode&S_IWUSR)
printf("w");
else
printf("-");
if(st.st_mode&S_IXUSR)
printf("x");
else
printf("-");
if(st.st_mode&S_IRGRP)
printf("r");
else
printf("-");
if(st.st_mode&S_IWGRP)
printf("w");
else
printf("-");
if(st.st_mode&S_IXGRP)
printf("x");
else
printf("-");
if(st.st_mode&S_IROTH)
printf("r");
else
printf("-");
if(st.st_mode&S_IWOTH)
printf("w");
else
printf("-");
if(st.st_mode&S_IXOTH)
printf("x ");
else
printf("- ");
strcpy(time,ctime(&st.st_mtime));
while(time[i]!='\n')
{
printf("%c",time[i]);
i++;
}
printf(" %s\n",dir->d_name);
i=0;
}
closedir(ptr);
}
/**************************************/
//./ls -l
else if(argc==2&&strcmp(argv[0],"./ls")==0&&strcmp(argv[1],"-l")==0)
{
ptr=opendir("./");
while((dir=readdir(ptr))!=NULL)
{
strcpy(dir_name,dir->d_name);
if(dir_name[0]!='.')
{
stat(dir->d_name,&st);
if(S_ISREG(st.st_mode))
{
printf("-");
}
else if(S_ISDIR(st.st_mode))
{
printf("d");
}
else
printf("0");
if(st.st_mode&S_IRUSR)
printf("r");
else
printf("-");
if(st.st_mode&S_IWUSR)
printf("w");
else
printf("-");
if(st.st_mode&S_IXUSR)
printf("x");
else
printf("-");
if(st.st_mode&S_IRGRP)
printf("r");
else
printf("-");
if(st.st_mode&S_IWGRP)
printf("w");
else
printf("-");
if(st.st_mode&S_IXGRP)
printf("x");
else
printf("-");
if(st.st_mode&S_IROTH)
printf("r");
else
printf("-");
if(st.st_mode&S_IWOTH)
printf("w");
else
printf("-");
if(st.st_mode&S_IXOTH)
printf("x ");
else
printf("- ");
strcpy(time,ctime(&st.st_mtime));
while(time[i]!='\n')
{
printf("%c",time[i]);
i++;
}
printf(" %s\n",dir->d_name);
}
i=0;
memset(dir_name,0,40);
}
closedir(ptr);
}
/***************************************/
//./ls /root/****/
else if(argc==2&&strcmp(argv[0],"./ls")==0)
{
ptr=opendir(argv[1]);
while((dir=readdir(ptr))!=NULL)
{
strcpy(dir_name,dir->d_name);
if(dir_name[0]!='.')
printf("%s\n",dir->d_name);
}
}
/******************************************/
//./ls -l /root/***/
else if(argc==3&&strcmp(argv[0],"./ls")==0&&strcmp(argv[1],"-l")==0)
{
ptr=opendir(argv[2]);
while((dir=readdir(ptr))!=NULL)
{
strcpy(dir_name,dir->d_name);
if(dir_name[0]!='.')
{
memset(dir_name,0,40);
strcpy(dir_name,argv[2]);
strcat(dir_name,dir->d_name);
stat(dir_name,&st);
if(S_ISREG(st.st_mode))
printf("-");
else if(S_ISDIR(st.st_mode))
printf("d");
else
printf("o");
if(st.st_mode&S_IRUSR)
printf("r");
else
printf("-");
if(st.st_mode&S_IWUSR)
printf("w");
else
printf("-");
if(st.st_mode&S_IXUSR)
printf("x");
else
printf("-");
if(st.st_mode&S_IRGRP)
printf("r");
else
printf("-");
if(st.st_mode&S_IWGRP)
printf("w");
else
printf("-");
if(st.st_mode&S_IXGRP)
printf("x");
else
printf("-");
if(st.st_mode&S_IROTH)
printf("r");
else
printf("-");
if(st.st_mode&S_IWOTH)
printf("w");
else
printf("-");
if(st.st_mode&S_IXOTH)
printf("x ");
else
printf("- ");
strcpy(time,ctime(&st.st_mtime));
while(time[i]!='\n')
{
printf("%c",time[i]);
i++;
}
printf("% s\n",dir->d_name);
}
i=0;
memset(dir_name,0,40);
}
}
/************************************************/
//./ls -a /root/*****/
else if(argc==3&&strcmp(argv[1],"-a")==0)
{
ptr=opendir(argv[2]);
while((dir=readdir(ptr))!=NULL)
{
printf("%s\n",dir->d_name);
}
}
/**********************************************/
//./ls -al /root/*****/
else if(argc==3&&strcmp(argv[1],"-al")==0)
{
ptr=opendir(argv[2]);
while((dir=readdir(ptr))!=NULL)
{
strcpy(dir_name,argv[2]);
strcat(dir_name,dir->d_name);
stat(dir_name,&st);
if(S_ISREG(st.st_mode))
printf("-");
else if(S_ISDIR(st.st_mode))
printf("d");
else
printf("o");
if(st.st_mode&S_IRUSR)
printf("r");
else
printf("-");
if(st.st_mode&S_IWUSR)
printf("w");
else
printf("-");
if(st.st_mode&S_IXUSR)
printf("x");
else
printf("-");
if(st.st_mode&S_IRGRP)
printf("r");
else
printf("-");
if(st.st_mode&S_IWGRP)
printf("w");
else
printf("-");
if(st.st_mode&S_IXGRP)
printf("x");
else
printf("-");
if(st.st_mode&S_IROTH)
printf("r");
else
printf("-");
if(st.st_mode&S_IWOTH)
printf("w");
else
printf("-");
if(st.st_mode&S_IXOTH)
printf("x ");
else
printf("- ");
strcpy(time,ctime(&st.st_mtime));
while(time[i]!='\n')
{
printf("%c",time[i]);
i++;
}
printf("% s\n",dir->d_name);
i=0;
memset(dir_name,0,40);
}
}
}