程序截图
#include
#include
#include
#include
#include
#include
#include
#include
#include
void display_file(char *filename);
void display_dir(char *dirname);
int main(int argc,char *argv[])
{
struct stat buf;
if(argc < 2)
{
printf("usage:%s file\n",argv[0]);
return 0;
}
if(lstat(argv[1],&buf)== -1)
{
perror("stat");
return -1;
}
if(S_ISDIR(buf.st_mode))//判断是否是文件夹
{
display_dir(argv[1]);
}
else
display_file(argv[1]);//不是文件夹情况
return 0;
}
void display_dir(char *dirname)
{
DIR *dp;
struct dirent *filename;
char dirfilename[100]={0};
int i=0;
dp=opendir(dirname);
if(dp == NULL)
{
perror("opendtr");
}
while((filename=readdir(dp))!=NULL)
{
if(strcmp(".",filename->d_name)==0||strcmp("..",filename->d_name)==0)
continue;
sprintf(dirfilename,"%s/%s",dirname,filename->d_name);//把文件夹中的文件名以字符串型式写到数组中
display_file(dirfilename);//调用文件函数
}
closedir(dp);
}
void display_file(char *filename)
{
int i=8;
struct stat buf;
struct tm *p;
if(lstat(filename,&buf)==-1)
{
perror("stat");
//return -1;
}
switch(buf.st_mode & 0170000)
{
case S_IFLNK: printf("l");break;
case S_IFREG: printf("-");break;
case S_IFBLK: printf("b");break;
case S_IFDIR: printf("d");break;
case S_IFCHR: printf("c");break;
case S_IFIFO: printf("i");break;
case S_IFSOCK: printf("s");break;
}
for(i=8;i>=0;i--)
{
if(buf.st_mode & (1<
{
switch(i%3)
{
case 0:printf("x");break;
case 1:printf("w");break;
case 2:printf("r");break;
}
}
else
printf("-");
}
p=localtime(&buf.st_mtime);
printf(" %d %s %s %ld %d-%0