主函数
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <pwd.h>
#include <grp.h>
#include <time.h>
#include"zuoye.h"
#include <dirent.h>
#include <strings.h>
#include <string.h>
int main(int argc, const char *argv[])
{
char s[100]="";
DIR *dp = opendir(argv[1]);
if(NULL == dp)
{
perror("opendir");
return -1;
}
while(1)
{
bzero(s,sizeof(s));
strcpy(s,argv[1]);
struct dirent *wj = readdir(dp);
if(NULL == wj)
{
if(0 == perror)
{
printf("文件读取完毕\n");
}else
{
perror("readdiro");
return -1;
}
}
strcat(s,wj->d_name);
struct stat buf;
if(stat(s,&buf) < 0)
{
perror("stat");
return -1;
}
if(wj->d_name[0] == '.')
continue;
get_fileType(buf.st_mode);
get_permission(buf.st_mode);
printf("%ld ",buf.st_nlink);
get_usrname(buf.st_uid);
get_grpname(buf.st_gid);
printf("%ld ",buf.st_size);
get_ctime(buf.st_ctime);
printf("%s\n",wj->d_name);
}
return 0;
}
功能函数
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <pwd.h>
#include <grp.h>
#include <time.h>
#include"zuoye.h"
void get_permission(mode_t mode)
{
for(int i = 8; i >= 0; i--)
{
if((mode & (1<<i)) == 0)
{
putchar('-');
}else
{
int res = i%3;
if(res == 2)
{
putchar('r');
}else if(res == 1)
{
putchar('w');
}else
{
putchar('x');
}
}
}
printf(" ");
}
int get_fileType(mode_t m)
{
switch (m & S_IFMT)
{
case S_IFBLK:
printf("b");
break;
case S_IFCHR:
printf("c");
break;
case S_IFDIR:
printf("d");
break;
case S_IFIFO:
printf("p");
break;
case S_IFLNK:
printf("l");
break;
case S_IFREG:
printf("-");
break;
case S_IFSOCK:
printf("s");
break;
}
return 0;
}
int get_usrname(uid_t uid)
{
struct passwd* pwd = getpwuid(uid);
if(NULL == pwd)
{
printf("getpwuid failed\n");
return -1;
}
printf("%s", pwd->pw_name);
return 0;
}
int get_grpname(gid_t gid)
{
struct group* grp = getgrgid(gid);
if(NULL == grp)
{
printf("%s",grp->gr_name);
return -1;
}
printf("%s",grp->gr_name);
return 0;
}
void get_ctime(long int tm)
{
struct tm *info = NULL;
info = localtime(&tm);
printf("%02d-%02d %02d:%02d",
info->tm_mon+1, info->tm_mday,
info->tm_hour, info->tm_min);
}
自定义头文件
#ifndef _ZUOYE_H_
#define _ZUOYE_H_
void get_permission(mode_t mode);
int get_fileType(mode_t m);
int get_usrname(uid_t uid);
int get_grpname(gid_t gid);
void get_ctime(long int tm);
#endif