#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <pwd.h>
#include <string.h>
#include <grp.h>
#include <time.h>
#include <stdlib.h>
//获取文件权限
void get_filemode(mode_t m,char arr[10])
{
int i,p = 0400;
char brr[4] = "rwx";
for(i=0;i<9;i++){
if((m&(p>>i))==0){
arr[i] = '-';
continue;
}
arr[i] = brr[i%3];
}
printf("%s ",arr);
}
//获取文件类型
void get_filetype(mode_t m)
{
if(S_ISREG(m)){
putchar('-');
}
if(S_ISDIR(m)){
putchar('d');
}
if(S_ISCHR(m)){
putchar('c');
}
if(S_ISBLK(m)){
putchar('b');
}
if(S_ISFIFO(m)){
putchar('p');
}
if(S_ISLNK(m)){
putchar('l');
}
if(S_ISSOCK(m)){
putchar('s');
}
return;
}
//获取当前文件用户名
void get_fileUname(uid_t uid)
{
struct passwd* name;
name = getpwuid(uid);
if(name==NULL){
perror("getpwuid");
return ;
}
char arr[20] = "";
strcpy(arr,name->pw_name);
printf("%s ",arr);
return ;
}
//获取文件所属组用户名
void get_fileGname(gid_t gid)
{
struct group* name;
name = getgrgid(gid);
if(name == NULL){
perror("getgrgid");
return ;
}
char arr[20] = "";
strcpy(arr,name->gr_name);
printf("%s ",arr);
}
//获取文件时间戳
void get_filetime(time_t time)
{
struct tm* p = NULL;
p = localtime(&time);
switch(p->tm_mon+1){
case 1:
printf("一 ");
break;
case 2:
printf("二 ");
break;
case 3:
printf("三 ");
break;
case 4:
printf("四 ");
break;
case 5:
printf("五 ");
break;
case 6:
printf("六 ");
break;
case 7:
printf("七 ");
break;
case 8:
printf("八 ");
break;
case 9:
printf("九 ");
break;
case 10:
printf("十 ");
break;
case 11:
printf("十一 ");
break;
case 12:
printf("十二 ");
break;
}
printf(" %d %d:%d ",p->tm_mday,p->tm_hour,
p->tm_min);
return ;
}
int main(int argc, const char *argv[])
{
struct stat buf;
if(stat(argv[1],&buf)){
perror("stat");
return -1;
}
//文件类型及权限
// printf("mode = %o\n",buf.st_mode);
char arr[10] = "";
get_filetype(buf.st_mode);
get_filemode(buf.st_mode,arr);
//文件硬链接个数
printf("%ld ",buf.st_nlink);
//文件当前用户
get_fileUname(buf.st_uid);
//文件所属组用户
get_fileGname(buf.st_gid);
//文件大小
printf("%ld ",buf.st_size);
//文件时间戳
get_filetime(buf.st_atim.tv_sec);
//文件名
printf("%s\n",argv[1]);
return 0;
}
IO STAT获取文件属性
于 2022-11-09 20:46:16 首次发布