c语言查看文件详细信息

2023年5月27日08:07:36
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <pwd.h>
#include <grp.h>
#include <string.h>
#include <time.h>
//文件权限
void get_filePermission(mode_t m)
{
	char str[4]="rwx";
	int i=0;
	for(i=0;i<9;i++)
	{
		if((m&(0400>>i))==0)
		{
			putchar('-');
			continue;
		}
		printf("%c",str[i%3]);
	}
	//	puts("");
}
//文件类型
char get_filetype(mode_t m)
{
	switch (m&S_IFMT)
	{
	case S_IFBLK: return ('b'); break;
	case S_IFLNK: return ('l'); break;
	case S_IFREG: return ('-'); break;
	case S_IFSOCK: return ('s'); break;
	case S_IFDIR: return ('d'); break;
	case S_IFCHR: return ('c'); break;
	case S_IFIFO: return ('p'); break;
	default:return 0;

	}
}
//文件所属用户
char* get_pwdname(uid_t uid,char *ptr)
{
	struct passwd* pwd=getpwuid(uid);
	if(NULL==pwd)
	{
		perror("getpwuid");
		return NULL;
	}
	strcpy(ptr,pwd->pw_name);
	return ptr;
}
//文件所属组用户
char* get_grname(gid_t gid,char *ptr)
{
	struct group* grp=getgrgid(gid);
	if(NULL==grp)
	{
		perror("gergrgid");
		return NULL;
	}
	strcpy(ptr,grp->gr_name);
	return ptr;
}
int main(int argc, const char *argv[])
{
	if(argc<2)
	{
		fprintf(stderr,"请在命令行上输入一个文件名\n");
		return -1;
	}
	struct stat buf;
	char a;
	char pwd[20]="";
	char grp[20]="";
	if(stat(argv[1],&buf)<0)
	{
		perror("stat");
		return -1;
	}
	//文件的类型以及权限
	//printf("st_mode:%o\n",buf.st_mode);
	a=get_filetype(buf.st_mode);
	printf("%c",a);
	get_filePermission(buf.st_mode);
	//硬链接个数
	printf(" %ld ",buf.st_nlink);
	//文件所属用户
	get_pwdname(buf.st_uid,pwd);
	printf("%s ",pwd);
	//puts(pwd);
	//printf("st_uid:%d\n",buf.st_uid);
	//文件所属组用户
	get_grname(buf.st_uid,grp);
	printf("%s ",grp);
	//puts( grp);
	//printf("st_gid:%d\n",buf.st_gid);
	//文件大小
	printf("%ld ",buf.st_size);
	//时间
	//printf("st_ctime:%ld\n",buf.st_ctime);
	struct tm *info=NULL;
	info=localtime(&buf.st_ctime);
	printf("%02d-%02d %02d:%02d ",\
			info->tm_mon+1,\
			info->tm_mday,info->tm_hour,info->tm_min);
	//文件名
	printf("%s\n",argv[1]);
	return 0;
}

运行结果

 

  • 作者:Lonly Observer
  • 原文链接:https://blog.csdn.net/m0_71934534/article/details/127777440
    更新时间:2023年5月27日08:07:36 ,共 1687 字。