• stat命令的实现


    任务详情

    1. 学习使用stat(1),并用C语言实现
      
    2. 提交学习stat(1)的截图
      
    3. man -k ,grep -r的使用
      
    4. 伪代码
      
    5. 产品代码 mystate.c,提交码云链接
      
    6. 测试代码,mystat 与stat(1)对比,提交截图
      

    实验过程
    一、学习stat命令
    image

    stat命令用于显示文件的状态信息。stat命令的输出信息比ls命令的输出信息要更详细。
    语法

    stat(选项)(参数)
    选项

    -L:支持符号连接;
    -f:显示文件系统状态而非文件状态;
    -t:以简洁方式输出信息;
    --help:显示指令的帮助信息;
    --version:显示指令的版本信息。
    参数

    文件:指定要显示信息的普通文件或者文件系统对应的设备文件名。
    查看文件或目录的诸如atime,mtime,ctime等信息即可使用stat命令,也可使用ls命令,但相比而言,stat还可以看到设备号,环境等信息。
    stat使用实例
    image

    二、man -k ,grep -r的使用

    使用 man -k stat | grep 2 查找stat相关函数。
    image

    使用命令man 2 statx查看学习。
    image

    关于stat的说明:
    image

    三、伪代码

    判断输入中是否包含文件参数,如果有则继续,没有则提示用户输入错误
    声明结构体,调用函数stat()
    打印输出节点ino、
    文件类型mode、
    文件的连接数nlink
    用户ID uid和组ID gid、
    块大小blksize、
    字节数size、
    块数目blocks、
    三个时间atime、mtime和ctime
    四、产品代码 mystate.c,提交码云链接

    点击查看代码
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <unistd.h>
    
    int main(int argc, char *argv[])
    {
        struct stat sb;
        if (argc != 2) {
            fprintf(stderr, "Usage: %s <pathname>\n", argv[0]);
            exit(EXIT_FAILURE);
        }
        if (stat(argv[1], &sb) == -1) {
            perror("stat");
            exit(EXIT_FAILURE);
        }
        printf("文件类型:                ");
        switch (sb.st_mode & S_IFMT) {
            case S_IFBLK:   printf("block device\n");
                break;
        case S_IFCHR:   printf("character device\n");
                break;
        case S_IFDIR:   printf("directory\n");
                break;
        case S_IFIFO:   printf("FIFO/pipe\n");
                break;
        case S_IFLNK:   printf("symlink\n");
                break;
        case S_IFREG:   printf("regular file\n");
                break;
        case S_IFSOCK:  printf("socket\n");
                break;
        default:        printf("unknown?\n");
                break;
        }
        printf("大小:       %lld bytes\n",(long long) sb.st_size);
        printf("块:         %lld\n",(long long) sb.st_blocks);
        printf("Inode:      %ld\n", (long) sb.st_ino);
        printf("硬链接:     %ld\n", (long) sb.st_nlink);
        printf("权限:       UID=%ld   GID=%ld\n",(long) sb.st_uid, (long) sb.st_gid);
        printf("最近访问:   %s", ctime(&sb.st_atime));
        printf("最近更改:   %s", ctime(&sb.st_ctime));
        printf("最近改动:   %s", ctime(&sb.st_mtime));
        exit(EXIT_SUCCESS);
    }
    

    五、测试代码,mystat 与stat(1)对比,提交截图

    如图所示:
    image

  • 相关阅读:
    Struts1简单开发流程梳理
    更改数据库字符集编码引起的问题、textarea标签输出内容时不能顶格(左对齐)输出
    FineReport基本使用
    Navicat for MySQL笔记1
    Hibernate(十)
    Elasticsearch NEST 控制字段名称命名格式
    ckeditor 敏感词标记显示处理方法
    Elasticsearch .Net Client NEST 多条件查询示例
    Elasticsearch .Net Client NEST 索引DataSet数据
    一个很简单的SqlServer生成常用C#语句工具的诞生
  • 原文地址:https://www.cnblogs.com/1482156703optimus/p/16779395.html
Copyright © 2020-2023  润新知