• stat(1)学习/mystat实现


    stat(1)

    关于stat

    stat命令主要用于显示文件或文件系统的详细信息,该命令的语法格式如下:

    • -f:不显示文件本身的信息,显示文件所在文件系统的信息
    • -L:显示符号链接
    • -t:简洁模式,只显示摘要信息
      stat命令显示的是文件的I节点信息。Linux文件系统以块为单位存储信息,为了找到某一个文件所在存储空间的位置,用I节点对每个文件进行索引,I节点包含了描述文件所必要的全部信息,其中包含了文件的大小,类型,存取权限,文件的所有者。
      使用命令 man -k stat

      使用命令 man stat查看stat的系统调用

      从图中可以看到stat的用法是display file or file system status,显示文件的状态
    Linux下的stat函数

    传参方式:通过文件名filename获取文件信息,并保存在buf所指的结构体stat中
    头文件:

    #include <sys/stat.h>
     #include <unistd.h>
    

    结构体:

      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;      //文件字节数(文件大小)
        unsigned long st_blksize;   //块大小(文件系统的I/O 缓冲区大小)
        unsigned long st_blocks;    //块数
        time_t        st_atime;     //最后一次访问时间
        time_t        st_mtime;     //最后一次修改时间
        time_t        st_ctime;     //最后一次改变时间(指属性)
      };
    

    格式:int stat(const char *file_name, struct stat *buf );

    man -k,grep -r的使用

    man -k 根据关键字搜索联机帮助,是一种模糊搜索。
    grep -r 快速搜索在目录下面的含有关键字的文件
    所以加上grep可以帮助我们更快地找到我们所需的文件
    使用命令man -k stat | grep 1

    使用命令grep -r stat
    匹配到二进制文件

    伪代码

    1.将stat所需的文件路径(filename/filepath)作为参数传入到argv中
    2.使用stat(pathname,&buf)函数将文件的相关信息存入到stat结构体中
    3.系统调用stat函数进行相关信息的输出
    

    实现mystat

    编译运行结果如下:

    上传码云

    1.首先在ubuntu下输入命令 sudo apt-get install git,下载安装git

    2.进行git配置

    复制码云链接,部署

    将写好的mystat代码移动到wjstat文件夹下:

    最后部署成功:

    码云链接如下:
    https://gitee.com/wang-jingspm/wjstat/blob/master/mystat.c

    具体的ubuntu git环境配置可参考链接https://blog.csdn.net/daocaokafei/article/details/121895641

    mystat与stat(1)对比

    通过对比我们可以发现,基本的输出内容都相似,但是gid 和 uid 由于我的代码中是以整形形式输出,所以输出的是1000,而原来的stat函数输出的是wj/1000,其代表的含义都相同,另外,更改日期等表示的方法不一样,但代表的含义也都相同。

  • 相关阅读:
    Makefile的常用技术总结
    NPOI 插入行[转]
    LINQ语句中的.AsEnumerable() 和 .AsQueryable()的区别 [转]
    Using Google Public DNS[Google公共DNS服务器]
    软件开发知识[TDD]
    MySQL函数之STRCMP()
    MySQL知识[INSERT语法]
    软件开发知识[ORM]
    软件开发知识[ADO.NET Entity Framework]
    mysql workbench 在模板与数据库间同步
  • 原文地址:https://www.cnblogs.com/ssssspm/p/16774844.html
Copyright © 2020-2023  润新知