运用stat显示文件的属性,并将权限修改为rwx形式,将日期修改为标准形式(年-月-日 时-分-秒)
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <time.h>
#define ERR_MSG(msg) {\
fprintf(stderr,"line: %d\n",__LINE__);\
perror(msg);\
}
void filePermission(mode_t mode){
for(int i = 0; i < 3; i ++){
int num = 0400;
num = num >> (i*3);
int type = 1;
int type2 = num >> 3;
while(num > type2){
if((mode & num) != 0){
if(type == 1)
printf("r");
else if(type == 2)
printf("w");
else
printf("x");
}
else{
printf("-");
}
type ++;
num = num >> 1;
}
}
printf("\n");
}
int main(int argc, const char *argv[])
{
struct stat buf;
if(stat("./01_fileno.c",&buf) < 0)
{
ERR_MSG("stat");
return -1;
}
//文件类型以及权限
//printf("mod 0%o\n",buf.st_mode);
printf("mode: ");
filePermission(buf.st_mode);
//硬链接数
printf("nlink: %ld\n",buf.st_nlink);
//文件所属用户
printf("uid: %d\n",buf.st_uid);
//文件所属组用户
printf("gid: %d\n",buf.st_gid);
//文件大小
printf("size: %ld\n",buf.st_size);
//日期
struct tm *time = localtime(&buf.st_ctime);
printf("time: %4d-%02d-%02d %02d-%02d-%02d\n",\
time->tm_year+1900,time->tm_mon+1,\
time->tm_mday,time->tm_hour,time->tm_min,time->tm_sec);
return 0;
}
结果如下: