stat命令的实现
stat命令的实现
一.任务详情
- 提交学习stat(1)的截图
- man -k ,grep -r的使用
- 伪代码
- 产品代码 mystate.c,提交码云链接
- 测试代码,mystat 与stat(1)对比,提交截图
二.实现过程
关于stat命令
- stat 命令用于显示 inode 内容
- 语法
stat [文件或目录] - 选项
-L:支持符号连接
-f:显示文件系统状态而非文件状态
-t:以简洁方式输出信息 - 输出
文件名、大小、块、IO块、权限、文件类型等
man -k ,grep -r的使用
伪代码
读取文件;
调用函数stat();
依次打印;
代码
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
int main(int argc,char *argv[])
{
struct stat buf;
char *ptr;
stat(argv[1], &buf);
printf(" 文件:%s\n",argv[1]);
printf(" 大小:%lld ",(long long)buf.st_size);
printf("块:%lld ",(long long) buf.st_blocks);
printf("IO 块: %ld ",(long) buf.st_blksize);
if(S_ISREG(buf.st_mode))
{
ptr="普通文件";
}
else if(S_ISSOCK(buf.st_mode))
{
ptr="套接字文件";
}
else if(S_ISLNK(buf.st_mode))
{
ptr="符号链接文件";
}
else if(S_ISBLK(buf.st_mode))
{
ptr="块设备文件";
}
else if(S_ISDIR(buf.st_mode))
{
ptr="目录文件";
}
else if(S_ISCHR(buf.st_mode))
{
ptr="字符设备文件";
}
printf("%s\n",ptr);
printf("设备:%ld ",(long)buf.st_dev);
printf("Inode:%ld ",(long)buf.st_ino);
printf("硬链接:%ld\n", (long)buf.st_nlink);
printf("Uid:%ld ",(long)buf.st_uid);
printf("Gid:%ld\n",(long)buf.st_gid);
printf("最近访问:%s\n",ctime(&buf.st_atim));
printf("最近更改:%s\n",ctime(&buf.st_mtim));
printf("最近改动:%s\n",ctime(&buf.st_ctim));
}
运行结果:
码云链接:https://gitee.com/chen_sunyilongWANTED/stat/blob/master/stat
mystat与stat对比
很明显,mystat有许多东西是没有输出的