12月7号作业

题目:输出文件属性

代码:

#include<stdio.h>
#include<errno.h>
#include<string.h>
#include<time.h>
#include<unistd.h>
#include<sys/stat.h>
#include<sys/types.h>
#include<fcntl.h>
#include <pwd.h>
#include <grp.h>
void get_FTime(struct stat buf)
{
    char *mon[12]={"一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一","十二"};
    struct tm* info=NULL;
    info=localtime(&buf.st_ctime);
    printf("%s %d %02d:%02d",mon[info->tm_mon],info->tm_mday,info->tm_hour,info->tm_min);
}
void get_FG(struct stat buf)
{
    struct group* grp = getgrgid(buf.st_gid);
    if(NULL == grp)
    {
        perror("getgrgid");
        return;
    }
    printf("%s", grp->gr_name);
}
void get_FU(struct stat buf)
{
    struct passwd* pwd = getpwuid(buf.st_uid);
    if(NULL == pwd)
    {
        perror("getpwuid");
        return ;
    }
    printf("%s", pwd->pw_name);
}
char *get_FP(mode_t mode,char pstr[10])
{
                                                                                                                                                         
    int a=0400;
    char b[3]="rwx";
    int i=0,j=0;
    while(a!=0)
    {
        if((mode&a)!=0) pstr[j]=b[i];
        else pstr[j]='-';
        a=a>>1;
        i++;
        if(i==3)i=0;
        j++;
    }
    return pstr;
}
char get_FT(mode_t mode)
{
    if(S_ISREG(mode))       return '-';
    else if(S_ISDIR(mode))  return 'd';
    else if(S_ISCHR(mode))  return 'c';
    else if(S_ISBLK(mode))  return 'b';
    else if(S_ISFIFO(mode)) return 'p';
    else if(S_ISLNK(mode))  return 'l';
    else if(S_ISSOCK(mode)) return 's';
}
int main(int argc, const char *argv[])
{
    char pst[10]=" ";
    struct stat buf;
    if(stat(argv[1],&buf)<0)
    {
        perror("stat");
        return -1;
    }
    printf("%c",get_FT(buf.st_mode));
    printf("%s",get_FP(buf.st_mode,pst));
    printf(" ");
    printf("%ld",buf.st_nlink);
    printf(" ");
    get_FU(buf);
    printf(" ");
    get_FG(buf);
    printf(" ");
    printf("%ld",buf.st_size);
    printf(" ");
    get_FTime(buf);
    printf(" ");
    printf("%s\n",argv[1]);
    return 0;
}
                                                                                                                                                         
                                                                                                                                                         
                                                                                                                                                         
                                                                                                                                                         
                                                                                                                                                         
                                                                                                                                                         
                                                                                                                                                         
                                                                                                                                                         

运行结果:

ubuntu@ubuntu:~$ ./a.out b.c
-rw-rw-r-- 1 ubuntu ubuntu 186176 十二 7 11:12 b.c

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值