作业要求:输出一个文件描述表中的inode表储存的文件属性;
代码如下图所示:
#include<stdio.h>
#include<sys/types.h>
#include<unistd.h>
#include<sys/stat.h>
#include<time.h>
#include<string.h>
void get_filepermission(mode_t mode)
{
int i=0,i1=0; //i1为测试循环次数函数
int t=0400;
printf("文件权限为-");
do
{
if((mode&t)!=0&&0==i%3)
putchar('r');
else if((mode&t)!=0&&1==i%3)
putchar('w');
else if((mode&t)!=0&&2==i%3)
putchar('x');
else
putchar('-');
i++;
}while((t=(t>>1))!=0);
printf("\n");
//printf("循环了%d次\n",i);
}
void get_fileTime(long int *t)
{
struct tm*t1=localtime(t);//用localtime把时间转化成:年月日时分秒
printf("文件最后修改日期为:%4d年%2d月%2d日%2d:%2d:%2d\n",t1->tm_year+1900,\
t1->tm_mon,t1->tm_mday,t1->tm_hour,t1->tm_min,t1->tm_sec);
}
int main(int argc, const char *argv[])
{
struct stat buf;//定义一个结构体变量buf
if(stat("./number1.txt",&buf)<0)//将一个文件的inode表的地址放到buf中去
{
perror("stat");
return -1;
}
//输出权限
get_filepermission(buf.st_mode);
//输出用户号
printf("UID为:%d\n",buf.st_uid);
//输出组号
printf("GID为:%d\n",buf.st_gid);
//输出时间
get_fileTime(&buf.st_atim.tv_sec); //将储存时间变量的指针的结构体变量buf调入到提取时间函数中
//输出大小
printf("文件大小为:%ld\n",buf.st_size);
return 0;
}
输出效果如下;
原文件属性如下图;