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

  • 相关阅读:
    ORA-04098 trigger 'DBBJ.DB_EV_ALTER_ST_METADATA' is invalid and failed re-validation
    ORA -04098 触发器无效且未通过重新验证
    Oracle 设置主键自增长__Oracle
    重启Oracle服务
    手动启动 oracle 服务
    oracle错误-ORA-12519, TNS:no appropriate service handler found
    ORA-00904: 标识符无效——解决方案
    [原创] 新人分享--ORA-01012:not logged on的解决办法 [复制链接]
    java验证,”支持6-20个字母、数字、下划线或减号,以字母开头“这个的正则表达式怎么写?
    全面解析JS字符串和正则表达式中的match、replace、exec等函数
  • 原文地址:https://www.cnblogs.com/DKYcaiji/p/15501121.html
Copyright © 2011-2022 走看看