1月31日 io线程进程

#include<stdio.h>

#include<string.h>

#include<sys/types.h>

#include<sys/stat.h>

#include<fcntl.h>

#include<unistd.h>

#include<time.h>

#include<pwd.h>

#include<grp.h>

#define ERR_MSG(msg) do{\

printf("line:%d\n",__LINE__);\

perror(msg);\

}while(0)

char* get_filePermission(mode_t m,char ptr[10],int size)

{

if(size<10)

{

printf("数组容量必须大于10");

return NULL;

}

char per[]="rwx";

int i=0;

for(i=0;i<9;i++)

{

if((m&(0400>>i))==0){

ptr[i]='-';

}

else{

ptr[i]=per[i%3];

}

}

return ptr;

}

char* get_fileStyle(mode_t m,char pdr[])

{

if((m&S_IFMT)==S_IFREG){

strcpy(pdr,"-");

}

else if((m&S_IFMT)==S_IFLNK){

strcpy(pdr,"l");

}

else if((m&S_IFMT)==S_IFSOCK){

strcpy(pdr,"s");

}

else if((m&S_IFMT)==S_IFBLK){

strcpy(pdr,"b");

}

else if((m&S_IFMT)==S_IFDIR){

strcpy(pdr,"d");

}

else if((m&S_IFMT)==S_IFCHR){

strcpy(pdr,"c");

}

else if((m&S_IFMT)==S_IFIFO){

strcpy(pdr,"p");

}

return pdr;

}

char* get_usrname(uid_t uid)

{

static char usrname[20]="";

struct passwd* usr=getpwuid(uid);

if(NULL==usr){

return NULL;

}

strcpy(usrname,usr->pw_name);

return usrname;

}

char* get_grpname(uid_t gid)

{

static char grpname[20]="";

struct group* gr=getgrgid(gid);

if(NULL==gr)

{

perror("getGrpName");

return NULL;

}

strcpy(grpname,gr->gr_name);

return grpname;

}

int main(int argc, const char *argv[])

{

char ptr[10]="";

char pdr[2]="";

struct stat buf;

struct tm* hr;

if(stat("./02fclose.c",&buf)<0){

perror("stat");

return -1;

}

get_filePermission(buf.st_mode,ptr,sizeof(ptr));

get_fileStyle(buf.st_mode,pdr);

printf("%s",pdr);

printf("%s\n",ptr);

printf("link=%ld\t",buf.st_nlink);

printf("%s %s\t",get_usrname(buf.st_uid),\

get_grpname(buf.st_gid));

printf("size=%ld",buf.st_size);

hr=localtime(&buf.st_atime);

printf(" %d月%d日 %02d:%02d:%02d",hr->tm_mon+1,hr->tm_mday,\

hr->tm_hour,hr->tm_min,hr->tm_sec);

printf(" 02fclose.c\n");

return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值