IOday3作业

 

#include <head.h>
int get_filePerrmison(mode_t mode)//获取文件权限
{
	char per[] ="rwx";
	for(int i=0;i<9;i++)
	{
		if((mode&(0400>>i))==0)
		{
			putchar('-');
			continue;
		}
		putchar(per[i%3]);
	}

}
int get_fileType(mode_t m) //获取文件类型
{
	switch(m&S_IFMT)
	{
	case S_IFSOCK: putchar('s');break;
	case S_IFLNK: putchar('l');break;
	case S_IFREG: putchar('-');break;
	case S_IFBLK: putchar('b');break;
	case S_IFDIR: putchar('d');break;
	case S_IFCHR: putchar('c');break;
	case S_IFIFO: putchar('p');break;

	}

}




int main(int argc, const char *argv[])
{
	printf("请输入目录名:\n");
	char arr[50]="";
	scanf("%s",arr);
	char tmp[50]="";
	strcpy(tmp,arr);

	DIR* dirp=opendir(arr);
    if(NULL==dirp)
    {
        ERR_MSG("opendir");
		return -1;
    }
    struct dirent*rp=NULL;//读取路径下目录
    while(1)
    {
		bzero(arr,sizeof(arr));
		strcpy(arr,tmp);
		rp =readdir(dirp);
        if(NULL==rp)
        {
            if(0==errno)
            {
               
                break;
            }
            else
            {
                ERR_MSG("readdir");
            }
		}
		if('.'==rp->d_name[0])
		{
			continue;
		}
		struct stat buf;
		
		if(stat(strcat(arr,rp->d_name),&buf)<0)
		{
			ERR_MSG("open");
			return -1;
		}
	
		struct tm* t;
		t=localtime(&buf.st_ctime);

		get_fileType(buf.st_mode);//提取文件类型
		get_filePerrmison(buf.st_mode);//提取文件权限
		printf(" %5lu",buf.st_nlink);//打印硬链接个数
		struct passwd *pwd=getpwuid(buf.st_uid);
		if(NULL==pwd)
		{
			ERR_MSG("getpwuid");
			return -1;
		}
		int m=sizeof(pwd->pw_name);
		printf(" %-*s",m,pwd->pw_name);
		struct group *grp=getgrgid(buf.st_gid);
		if(NULL==grp)
		{
			ERR_MSG("getgrgid");
			return -1;
		}
		m=sizeof(grp->gr_name);
		printf(" %-*s",m,grp->gr_name);
		m=sizeof(buf.st_size)-1;
		printf("%*ld",m,buf.st_size);
		char *month_ch[]={"一","二","三","四","五","六","七","八","九","十","十一","十二"};
		printf(" %s月",month_ch[t->tm_mon]);
		printf(" %02d %02d:%02d",t->tm_mday,t->tm_hour,t->tm_min);
		printf(" %s",rp->d_name);
		putchar(10);
	}
	return 0;

}        

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值