十月十号作业

#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <stdio.h>
#include <pwd.h>
#include <grp.h>
#include<time.h>  
#include <dirent.h>
#include <errno.h>
//提取文件权限
void get_fliePermission(mode_t m)
{
    int i=0;
    for(i=0;i<9;i++)
    {
        if(((0400>>i) & m) == 0)
        {
            putchar('-');
            continue;
        }
        //能运行到当前位置,则说明有权限
        //则需要判断打印是r w x

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

}

void 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_IFDIR:  putchar('d');  break;
    case S_IFBLK:  putchar('b');  break;
    case S_IFCHR:  putchar('c');  break;
    case S_IFIFO:  putchar('p');  break;
    default:printf("mode错误\n");
    }
}
void get_fileUsrname(uid_t uid)
{
    struct passwd* pwd = getpwuid(uid);
    if(NULL == pwd)
    {
        perror("pwd");
        return ;
    }
    printf("%s",pwd->pw_name);
}
void get_fileGrpname(gid_t gid)
{
    struct group* grp = getgrgid(gid);
    if(NULL == grp)
    {
        perror("getgrgid");
        return ;
    }
    printf(" %s",grp->gr_name);
}

int main(int argc, const char *argv[])
{
    DIR *dp =opendir("./");
    if(NULL == dp)
    {
        perror("opendir");
        return -1;
    }
    //printf("目錄文件打開成功");
    struct dirent* rp =NULL;
    struct tm* info =NULL;
    struct stat buf;    
while(1)
{
    rp = readdir(dp);
    if(NULL == rp)
    {
        if(0 == rp)
        {
        //    printf("讀取到目錄結尾");
            break;
        }
        else
        {
            perror("readdir");
            return -1;
        }
    }
    if(*(rp->d_name)=='.')
    {
        continue;
    }

    if(stat(rp->d_name,&buf)<0)
    {
        perror("stat");
        return -1;
    }
    //文件的类型以及文件权限
    get_fileType(buf.st_mode);
    get_fliePermission(buf.st_mode);

    //文件的硬链接数
    printf(" %ld ",buf.st_nlink);

    //文件所属用户
     get_fileUsrname(buf.st_uid);

    //文件属组用户
    printf("%6ld",buf.st_size);    //文件的時間
    info = localtime(&(buf.st_ctime));
     printf(" %d月%02d %02d:%d",\
             info->tm_mon+1,info->tm_mday,\
             info->tm_hour,info->tm_min);
     printf(" %s\n",rp->d_name);
}
    return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值