#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <strings.h>
#include <string.h>
#include <pwd.h>
#include <grp.h>
#include <time.h>
//文件权限
char * permisson(mode_t m ,char prr[],int j )
{
int i=0;
char arr[4]="rwx";
// bzero(prr,j);
for(i=0;i<9;i++)
{
if((m&(0400>>i)) == 0 )
{
prr[i]='-';
continue;
}
prr[i]=arr[i%3];
}
return prr;
}
//文件类型
char type(mode_t m)
{
switch(m&S_IFMT)
{
case S_IFSOCK:
return('s');
case S_IFLNK:
return('l');
case S_IFREG:
return('-');
case S_IFBLK:
return('b');
case S_IFDIR:
return('d');
case S_IFCHR:
return('c');
case S_IFIFO:
return('p');
}
}
//Uid
char *uid(uid_t uid,char *brr)
{
struct passwd *uname=getpwuid(uid);
if(uname==NULL)
{
perror("getpwuid");
return NULL;
}
strcpy(brr,uname->pw_name);
return brr;
}
//gid
char *gid(gid_t gid,char *crr)
{
struct group *gname=getgrgid(gid);
if(gname==NULL)
{
perror("getgrgid");
return NULL;
}
strcpy(crr,gname->gr_name);
return crr;
}
//时间
struct tm * nowtime(time_t time)
{
struct tm *p;
p=localtime(&time);
return p;
}
int main(int argc, const char *argv[])
{
struct stat buf;
if(argc<2)
{
printf("error");
return -1;
}
if(stat(argv[1],&buf)<0)
{
perror("stat");
return -1;
}
char prr[10]="";
char brr[10]="";
char crr[10]="";
permisson(buf.st_mode,prr,10);
printf("%c",type(buf.st_mode));
printf("%s",prr);
printf(" %ld",buf.st_nlink);
printf(" %ld",buf.st_size);
uid(buf.st_uid,brr);
printf(" %s",brr);
uid(buf.st_gid,crr);
printf(" %s",crr);
struct tm* pa;
pa =nowtime((time_t)buf.st_ctime);
printf(" %d %d %d:%d",pa->tm_mon+1,pa->tm_mday,pa->tm_hour,pa->tm_min);
printf(" %s\n",argv[1]);
return 0;
}
输出文件属性
最新推荐文章于 2023-11-22 16:49:03 发布