zoukankan      html  css  js  c++  java
  • stat命令的实现-mysate


    1、学习stat(1)命令

    在终端中输入man 1 stat得到s的帮助文档:

    stat功能:用来显示文件的详细信息,包括inode, atime, mtime, ctime。
    stat [OPTION]…FILE…
    stat [选项] [参数]
    选项:

    • -L:支持符号连接
    • -f:显示文件系统状态而非文件状态
    • -t:以简洁方式输出信息
    • -c:以特定格式输出文件的某些信息

    参数:

    • FILE(文件):指定要显示信息的普通文件或者文件系统对应的设备文件名。

    stat使用实例:

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

    在终端中输入man -k status | grep或者man -k stat | grep 2,查找与stat功能相关的系统调用函数,其中可以发现一个函数:stat(),和stat有关(当然,我们也可以看到其他相关的函数,如:fstat()、lstat()、fstatat()等):

    在终端中输入man 2 stat 查看帮助文档:

    3、mystat伪代码实现

    我们可以通过调用stat()函数来实现stat,伪代码如下:

    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <unistd.h>
            
    调用函数stat()
    依次打印输出节点ino、文件类型mode、文件的连接数nlink、用户ID uid和组ID gid、块大小blksize、字节数size、块数目blocks、以及三个时间atime、mtime和ctime
    

    4、实现mystat

    mystat.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>
    ", argv[0]);
            exit(EXIT_FAILURE);
        }
        if (stat(argv[1], &sb) == -1) {
            perror("stat");
            exit(EXIT_FAILURE);
        }
        printf("File type:                ");
        switch (sb.st_mode & S_IFMT) {
            case S_IFBLK:   printf("block device
    ");
                break;
        case S_IFCHR:   printf("character device
    ");
                break;
        case S_IFDIR:   printf("directory
    ");
                break;
        case S_IFIFO:   printf("FIFO/pipe
    ");
                break;
        case S_IFLNK:   printf("symlink
    ");
                break;
        case S_IFREG:   printf("regular file
    ");
                break;
        case S_IFSOCK:  printf("socket
    ");
                break;
        default:        printf("unknown?
    ");
                break;
        }
        printf("I-node number:            %ld
    ", (long) sb.st_ino);
        printf("Mode:                     %lo (octal)
    ",(unsigned long) sb.st_mode);
        printf("Link count:               %ld
    ", (long) sb.st_nlink);
        printf("Ownership:                UID=%ld   GID=%ld
    ",(long) sb.st_uid, (long) sb.st_gid);
        printf("Preferred I/O block size: %ld bytes
    ",(long) sb.st_blksize);
        printf("File size:                %lld bytes
    ",(long long) sb.st_size);
        printf("Blocks allocated:         %lld
    ",(long long) sb.st_blocks);
        printf("Last status change:       %s", ctime(&sb.st_ctime));
        printf("Last file access:         %s", ctime(&sb.st_atime));
        printf("Last file modification:   %s", ctime(&sb.st_mtime));
        exit(EXIT_SUCCESS);
    }
    

    5、测试实现mystat

    参考资料:stat命令详解

  • 相关阅读:
    CSS框模型,浮动,定位以及其他属性
    CSS基础知识点总结
    Html基础知识点
    CentOS7桌面版系统使用的一些小技巧
    win 执行puppet
    常用脚本总结
    Ansible小记
    Tampermonkey-让百度云下载飞起来
    安装zabbix 遇到的一些问题
    alias
  • 原文地址:https://www.cnblogs.com/seven-moon/p/12103425.html
Copyright © 2011-2022 走看看