stat命令的实现
作业要求
学习使用stat(1),并用C语言实现
提交学习stat(1)的截图
man -k ,grep -r的使用
伪代码
产品代码 mystate.c,提交码云链接
测试代码,mystat 与stat(1)对比,提交截图
学习stat(1)的截图
- 用
man 1 stat
查看
通过学习知道了stat的作用,用法,参数等。stat主要是用于查询一个文件或路径的信息。
语法格式
stat [option] file
参数选项
-L:显示符号链接所指向文件的信息
-f:显示文件所在文件系统的信息
-t:以简洁方式输出信息
-c:以特定格式输出文件的某些信息
%a 八进制表示的访问权限
%A 可读格式表示的访问权限
%b 分配的块数(参见 %B)
%B %b 参数显示的每个块的字节数
%d 十进制表示的设备号
%D 十六进制表示的设备号
%f 十六进制表示的 Raw 模式
%F 文件类型
%g 属主的组 ID
%G 属主的组名
%h 硬连接数
%i Inode 号
%n 文件名
%N 如果是符号链接,显示器所链接的文件名
%o I/O 块大小
%s 全部占用的字节大小
%t 十六进制的主设备号
%T 十六进制的副设备号
%u 属主的用户 ID
%U 属主的用户名
%x 最后访问时间
%X 最后访问时间,自 Epoch 开始的秒数
%y 最后修改时间
%Y 最后修改时间,自 Epoch 开始的秒数
%z 最后改变时间
%Z 最后改变时间,自 Epoch 开始的秒数
针对文件系统还有如下格式选项:
%a 普通用户可用的块数
%b 文件系统的全部数据块数
%c 文件系统的全部文件节点数
%d 文件系统的可用文件节点数
%f 文件系统的可用节点数
%C SELinux 的安全上下文
%i 十六进制表示的文件系统 ID
%l 文件名的最大长度
%n 文件系统的文件名
%s 块大小(用于更快的传输)
%S 基本块大小(用于块计数)
%t 十六进制表示的文件系统类型
%T 可读格式表示的文件系统类型
man -k ,grep -r的使用
首先使用man -k stat | grep 2
查找系统调用
man 2 stat
查看stat的结构体
struct stat {
dev_t st_dev; /* ID of device containing file */
ino_t st_ino; /* Inode number */
mode_t st_mode; /* File type and mode */
nlink_t st_nlink; /* Number of hard links */
uid_t st_uid; /* User ID of owner */
gid_t st_gid; /* Group ID of owner */
dev_t st_rdev; /* Device ID (if special file) */
off_t st_size; /* Total size, in bytes */
blksize_t st_blksize; /* Block size for filesystem I/O */
blkcnt_t st_blocks; /* Number of 512B blocks allocated */
}
grep -r stat
用于在该目录下查找包含stat的文件
伪代码实现
判断输入中是否包含文件参数,如果有则继续,没有则提示用户输入错误
根据文件路径,调用stat()函数给结构体赋值
逐个取出结构体中的数据并输出
使用switch语句来判断注意文件的mode