输出文件属性

#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;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值