zoukankan      html  css  js  c++  java
  • C语言编程实现mystat

    C语言编程实现mystat

    20191331 lyx

    实践任务

    学习使用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

  • 相关阅读:
    faster with MyISAM tables than with InnoDB or NDB tables
    w-BIG TABLE 1-toSMALLtable @-toMEMORY
    Indexing and Hashing
    MEMORY Storage Engine MEMORY Tables TEMPORARY TABLE max_heap_table_size
    controlling the variance of request response times and not just worrying about maximizing queries per second
    Variance
    Population Mean
    12.162s 1805.867s
    situations where MyISAM will be faster than InnoDB
    1920.154s 0.309s 30817
  • 原文地址:https://www.cnblogs.com/DKYcaiji/p/15501121.html
Copyright © 2011-2022 走看看