mystat
学习使用stat(1),并用C语言实现
1.提交学习stat(1)的截图
首先man一下
可以看出,stat命令可以用来显示文件的详细信息,包括inode, atime, mtime, ctime
stat -f 显示文件系统的信息
stat -t 以简洁的方式输出
stat * 显示该目录下所有文件及子目录的信息
stat显示了三个很重要的时间,分别是access、modify和change time,他们的区别如下:
- 当我们仅仅只是读取文件时,access time 改变,而modify,change time 不会改变
- 当修改文件时,access,modify,change time 都会跟着改变
- 当修改文件属性时,change time 改变,而access,modify time 不变。
2.man -k ,grep -r的使用
man -k xxx可以搜索出所有带有xxx关键字的命令,比如
因为Linux命令可分为以下八种
MANUAL SECTIONS
The standard sections of the manual include:
1 User Commands
2 System Calls
3 C Library Functions
4 Devices and Special Files
5 File Formats and Conventions
6 Games et. Al.
7 Miscellanea
8 System Administration tools and Deamons
所以我们可以通过命令man -k stat | grep 2来查看stat命令的系统调用
发现了一个结构体
从这里我们可以知道只要调用stat函数就可以实现stat命令的功能,此外,文件类型的输出是一个整数,我们还要加一步判断
3.伪代码
由上面的分析我们可以得出伪代码
1.判断输入的文件是否存在或者正确
2.调用结构体并赋值
3.输出结构体
4.产品代码 mystate.c,提交码云链接
#include <sys/types.h>
#include <sys/stat.h>
#include <time.h>
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
struct stat sb;
if (argc != 2) {
fprintf(stderr, "Usage: %s <pathname>\n", argv[0]);
exit(EXIT_FAILURE);
}
if (stat(argv[1], &sb) == -1) {
perror("stat");
exit(EXIT_FAILURE);
}
printf("文件: %s\n",argv[1]);
printf("大小: %lld bytes\n",(long long) sb.st_size);
printf("块: %lld\n",(long long) sb.st_blocks);
printf("IO块: %ld ",(long) sb.st_blksize);
switch (sb.st_mode & S_IFMT) {
case S_IFBLK: printf("块设备\n");
break;
case S_IFCHR: printf("character device\n");
break;
case S_IFDIR: printf("目录\n");
break;
case S_IFIFO: printf("FIFO/管道\n");
break;
case S_IFLNK: printf("符号链接\n");
break;
case S_IFREG: printf("普通文件\n");
break;
case S_IFSOCK: printf("socket\n");
break;
default: printf("未知?\n");
break;
}
printf("I-node: %ld\n", (long) sb.st_ino);
printf("硬连接: %ld\n", (long) sb.st_nlink);
printf("权限: UID=%ld GID=%ld\n",(long) sb.st_uid, (long) sb.st_gid);
printf("最近访问: %s", ctime(&sb.st_atime));
printf("最近更改: %s", ctime(&sb.st_mtime));
printf("最近改动: %s", ctime(&sb.st_ctime));
exit(EXIT_SUCCESS);
}
码云链接
https://gitee.com/qiu_yu_wang/code/issues/I4H706
5.测试代码,mystat 与stat(1)对比,提交截图
参考:
https://blog.csdn.net/jerry_1126/article/details/52716571
https://www.cnblogs.com/ggjucheng/archive/2013/01/13/2856896.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
2019-11-06 2019-2020 191316《信息安全专业导论》第六周学习总结