0729 练习

1.头文件

#ifndef __LIST_H__
#define __LIST_H__

#include<stdio.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<unistd.h>
#include<pwd.h>
#include<grp.h>
#include<time.h>
#include<dirent.h>
#include<errno.h>
#include<string.h>

     

int get_permission(mode_t m);

int get_fileType(mode_t m);

int get_usrname(uid_t uid);

int get_grpname(gid_t gid);

int get_time(time_t ctime);

int get_inf(const char*name);

int listshow(const char*dir);
#endif

2.调用函数

#include"list.h"




//获取文件权限
int get_permission(mode_t m)
{
	int i=0,j=0;
	for(i=8;i>=0;i--)
	{
		if(m&(1<<i)==0)
		{
			printf("-");
			continue;
		}

		switch(i%3)
		{
		case 2:
			printf("r");
			break;
		case 1:
			printf("w");
			break;
		case 0:
			printf("x");
			break;
		}
	}

	return 0;
}

//获取文件类型
int get_fileType(mode_t m)
{
	switch (m & S_IFMT) {
	case S_IFBLK: printf("b"); break;
	case S_IFCHR: printf("c"); break;
	case S_IFDIR: printf("d"); break;
	case S_IFIFO: printf("p"); break;
	case S_IFLNK: printf("l"); break;
	case S_IFREG: printf("-"); break;
	case S_IFSOCK: printf("s"); break;
	default: printf("unknown?\n"); break;
	}
	return 0;
	
}


//获取文件所属用户名
int get_usrname(uid_t uid)
{
	struct passwd* pwd=getpwuid(uid);
	if(NULL==pwd)
	{
		printf("getpwuid failed\n");
		return -1;
	}
	printf("%s ",pwd->pw_name);

	return 0;
}

//获取文件所属组用户名
int get_grpname(gid_t gid)
{
	struct group* grp=getgrgid(gid);
	if(NULL==grp)
	{
		printf("getgrgid failed\n");
		return -1;
	}
	printf("%s ",grp->gr_name);
	return 0;
}

//获取文件时间

int get_time(time_t ctime)
{
	struct tm*info = localtime(&ctime);
	printf("%d-%02d-%02d\n",info->tm_year+1900,info->tm_mon+1,info->tm_mday);
	fflush(stdout);

	return 0;
}

//获取文件信息
int get_inf(const char*name)
{
	//获取文件属性
	struct stat buf;
	if(stat(name,&buf)<0)
	{
		perror("stat");
		return -1;
	}
	
	//文件类型以及权限
	get_fileType(buf.st_mode);
	get_permission(buf.st_mode);

	//硬连接数
	printf(" %ld ",buf.st_nlink);

	//文件所属用户
	
	get_grpname(buf.st_gid);

	//文件所属组用户
	get_grpname(buf.st_gid);


	//文件大小
	printf("%5ld ",buf.st_size);

	//文件创建日期
	
	get_time(buf.st_mtime);

	//文件名
	printf("%s\n",name);

	return 0;
}

//显示目录下的文件
int listshow(const char*dir)
{	
	DIR* dp=opendir(dir);
    if(NULL==dp)
    {
        perror("opendir");
        return -1;
    }
    struct dirent* rp =NULL;
    while(1)
    {
        rp=readdir(dp);
        if(NULL==rp)
        {
            if(0==errno)
            {
                printf("目录读取结束\n");
                break;                                
            }
            else
            {
                perror("readdir");
                return -1;
            }

        }

        if(rp->d_name[0]!='.')
		{
			char list[100];
			strcpy(list,dir);
			strcat(list,rp->d_name);
			get_inf(list);
		}
	}	
	closedir(dp);

	return 0;
}
	

3.主函数

#include"list.h"


int main(int argc, const char *argv[])
{
	listshow(argv[1]);

	
	return 0;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值