#ifndef __STAFUN_H__
#define __STAFUN_H__
#include<stdio.h>
#include<sys/stat.h>
#include<sys/types.h>
#include<unistd.h>
#include<fcntl.h>
#include<grp.h>
#include<pwd.h>
#include<time.h>
char *get_filepermission(mode_t mode,char p[10]);
char get_fileType(mode_t mode);
void getp(mode_t mode);
void getg(mode_t mode);
void loca(time_t mode);
#endif
stafun.h
#include<stdio.h>
#include<sys/stat.h>
#include<sys/types.h>
#include<unistd.h>
#include<fcntl.h>
#include<grp.h>
#include<pwd.h>
#include<time.h>
//文件的权限
char *get_filepermission(mode_t mode,char p[10])
{
int a=0400;
char b[]="xrw";
for(int i=1;i<=9;i++)
{
if((mode&a)!=0)
{
// putchar(b[i%3]);
p[i-1]=b[i%3];
}
else
{
// putchar('-');
p[i-1]='-';
}
a=a>>1;
}
// puts("");
return p;
}
//文件的类型
char get_fileType(mode_t mode)
{
if(S_ISREG(mode))
{
return '-';
}
else if(S_ISDIR(mode))
{
return 'd';
}
else if(S_ISCHR(mode))
{
return 'c';
}
else if(S_ISBLK(mode))
{
return 'b';
}
else if(S_ISFIFO(mode))
{
return 'p';
}
else if(S_ISLNK(mode))
{
return 'l';
}
else if(S_ISSOCK(mode))
{
return 's';
}
}
//文件的所属用户
void getp(mode_t mode)
{
struct passwd *pass=getpwuid(mode);
if(NULL==pass)
{
perror("pass");
return ;
}
printf(" %s",pass->pw_name);
}
//文件的所属组用户
void getg(mode_t mode)
{
struct group *pass=getgrgid(mode);
if(NULL==pass)
{
perror("pass");
return ;
}
printf(" %s",pass->gr_name);
}
//文件的时间
void loca(time_t mode)
{
struct tm *p=localtime(&mode);
printf(" %d %d %d:%d",p->tm_mon+1,p->tm_mday,\
p->tm_hour,p->tm_min);
}
stafun.
int main(int argc, const char *argv[])
{
struct stat buf;
if(stat("./1.c",&buf)<0)
{
perror("seat");
return -1;
}
//文件的类型及权限
// printf("mode:%o\n",buf.st_mode);
char n=get_fileType(buf.st_mode);
putchar(n);
char arr[10]="";
char *p= get_filepermission(buf.st_mode,arr);
// puts(p);
printf("%s",p);
//文件的硬链接数
printf(" %ld",buf.st_nlink);
//文件的所属用户
// printf("uid:%d\n",buf.st_uid);
getp(buf.st_uid);
//文件的所属组用户
// printf("gid:%d\n",buf.st_gid);
getg(buf.st_gid);
//文件的大小
printf(" %ld",buf.st_size);
//文件的时间
// printf("time:%ld\n",buf.st_ctime);
loca(buf.st_ctime);
//文件名
printf(" 1.c\n");
return 0;
}
stat.c