• 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
    

    产品代码

    码云链接

    对比截图

  • 相关阅读:
    优秀的JavaScript模块是怎样炼成的(转发)
    从发展历史理解 ES6 Module(转发)
    JavaScript 模块演化简史(转发)
    objcopy 格式转换
    链接操作
    fflush()
    为什么栈地址从高到低生长,堆从低到高
    C语言中,a[-1] (负数下标)的用途
    va_list 、va_start、 va_arg、 va_end 使用说明
    docker 部署 redis
  • 原文地址:https://www.cnblogs.com/ruier/p/15516698.html
Copyright © 2020-2023  润新知