C语言编程实现mystat
# C语言编程实现mystat####本人纯小白,目前正在学习操作系统和内核编程。如有错误,欢迎各位大佬批评指正。轻喷{:1_932:}
## linux内核实践
**学习使用stat(1),并用C语言实现**
1. 学习stat(1)
2. man -k , grep -r
3. 伪代码
4. 产品代码 mystate.c
5. 测试代码,mystat 与stat(1)对比
## 实践内容
### 0.实践环境
OpenEuler 20.03 LTS
### 1.学习stat(1):
虽然在OpenEuler中安装了完整`man`手册,但现在看来好像也不那么“完整”
不过好在与stat相关的系统调用可以查到:
**在Ubuntu中通过man手册来学习 stat 命令相关使用方法:**
通过stat命令可以显示以下信息:
- File:显示文件名
- Size:显示文件大小
- Blocks:文件使用的数据块总数
- IO Block:IO块大小
- regular file:文件类型(常规文件)
- Device:设备编号
- Inode:Inode号
- Links:链接数
- Access:文件的权限
- Gid、Uid:文件所有权的Gid和Uid。
Linux 下的三个时间:
```
1. Access Time:简写为atime,表示文件的访问时间。当文件内容被访问时,更新这个时间
2. Modify Time:简写为mtime,表示文件内容的修改时间,当文件的数据内容被修改时,更新这个时间。
3. Change Time:简写为ctime,表示文件的状态时间,当文件的状态被修改时,更新这个时间,例如文件的链接数,大小,权限,Blocks数。
```
**stat的常用参数:**
+ -f:不显示文件本身的信息,显示文件所在文件系统的信息
+ -L:显示符号链接
+ -t:简洁模式,只显示摘要信息
总结:
stat命令显示的是文件的**I节点信息**。Linux文件系统以块为单位存储信息,为了找到某一个文件所在存储空间的位置,用I节点对每个文件进行索引,**I节点包含了描述文件所必要的全部信息**,其中包含了文件的大小,类型,存取权限,文件的所有者。
### 2.使用man -k, grep -r 掌握stat命令接口
```
man -k stat
man 2 stat
```
stat 命令头文件及接口:
```
#include <fcntl.h> /* Definition of AT_* constants */
#include <sys/stat.h>
int stat(const char *file_name, struct stat *buf );
```
stat 结构体:
```
struct stat {
dev_t st_dev; //文件的设备编号
ino_t st_ino; //节点
mode_t st_mode; //文件的类型和存取的权限
nlink_t st_nlink; //连到该文件的硬连接数目,刚建立的文件值为1
uid_t st_uid; //用户ID
gid_t st_gid; //组ID
dev_t st_rdev; //(设备类型)若此文件为设备文件,则为其设备编号
off_t st_size; //文件字节数(文件大小)
blksize_t st_blksize; //块大小(文件系统的I/O 缓冲区大小)
blocks_t st_blocks; //块数
time_t st_atime; //最后一次访问时间
time_t st_mtime; //最后一次修改时间
time_t st_ctime; //最后一次改变时间(指属性)
};
```
### 3.伪代码
main{
检查命令参数
获取文件属性
打印文件属性
{
文件设备编号
文件i节点标号
文件类型与权限
所有者
文件大小
文件系统缓冲区大小
占有区块数
文件最近访问时间
文件最后修改时间
最近更改时间
}
结束
}
### 4.产品代码
码云链接:https://gitee.com/DKY2019/xxaqxt/blob/master/mystat.c
### 5.测试代码
stat:
由于没有安装中文输入法 D:
所以直接输出英文了
另外排版上有一些不足
mystat与stat对比:
## 参考资料:
stat详解https://www.cnblogs.com/ultranms/p/9353347.html
多练习,做小项目,效果更好 加油加油 加油啊,加油,楼主很强大{:1_893:} 路人癸 发表于 2021-12-14 03:55
加油啊,加油,楼主很强大
谢谢您,我会继续加油 wuhui316 发表于 2021-11-16 08:55
加油加油
谢谢您,我会继续加油 kanxue2018 发表于 2021-11-14 23:44
多练习,做小项目,效果更好
谢谢您,我会继续加油{:1_893:}
页:
[1]