目录
1.思维导图
2.有道笔记
3.作业
获取文件属性信息,并输出
#include <stdio.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <time.h>
#include <unistd.h>
void print_mode(mode_t m, char buf[10]);
int main(int argc, const char* argv[])
{
// 1.校验参数
if (argc != 2) {
printf("input error\n");
printf("usage: ./a.out filename\n");
return -1;
}
// 2.获取文件属性信息
struct stat st_t; // 定义文件属性结构体
if (-1 == stat(argv[1], &st_t)) {
perror("stat");
return -1;
}
// 3.输出文件信息
char buf[10] = ""; // 保存文件权限
print_mode(st_t.st_mode, buf); // 文件权限
puts(buf);
printf("link:%ld\n", st_t.st_nlink);
printf("uid:%d\n", st_t.st_uid);
printf("gid:%d\n", st_t.st_gid);
printf("size:%ld\n", st_t.st_size);
// 文件时间戳格式转换
struct tm* t = localtime(&st_t.st_mtime);
printf("%02d %02d %02d:%02d\n", t->tm_mon + 1, t->tm_mday, t->tm_hour, t->tm_min);
return 0;
}
void print_mode(mode_t m, char buf[10])
{
char per[] = "rwx";
for (int i = 0; i < 9; i++) {
// 循环右移,按位与
if (m & (0400) >> i) {
// 保存对于权限
buf[i] = per[i % 3];
} else {
// 设置无权限
buf[i] = '-';
}
}
}