首页 > 其他分享 >stat命令的实现

stat命令的实现

时间:2022-10-11 15:34:14浏览次数:36  
标签:stat 实现 long st break 命令 printf sb

任务详情

  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

标签:stat,实现,long,st,break,命令,printf,sb
From: https://www.cnblogs.com/1482156703optimus/p/16779395.html

相关文章

  • Zabbix监控Ceph的两种实现方式
    Ceph作为一个开源的分布式存储平台,可以从软件层面正确提供所有的企业级存储特性,本文主要介绍使用Zabbix监控Ceph集群的两种方式。本文只是提供监控Ceph的思路或者方法,不涉及......
  • 【每日一练】31—CSS 实现一个彩色旋转方块loading动画效果
    写在前面今天练习的这个项目是一个加载动画,这个加载动画主要是为了在网络不好,页面加载缓慢时给用户的一个提示,一个好的加载动画,可以缓解用户的焦虑情绪,让等待变得有趣,现在很......
  • 4种Javascript实现深拷贝的方式
    来源| https://www.fly63.com概念介绍深拷贝:在堆内存中重新开辟一个存储空间,完全克隆一个一模一样的对象;浅拷贝:不在堆内存中重新开辟空间,只复制栈内存中的引用地址。本质......
  • css实现关闭按钮X
    html<divstyle="height:100px;width:100px;border:1pxsolidblack;position:relative;"><spanclass="my_close"></span></div> css.my_close{backgr......
  • (笔记)两行代码实现Windows和Ubuntu20.04虚拟机文件复制(超精简)
     因工作需要在Windows系统中安装虚拟机,在VMware中装了Ubuntu20.04,发现文件复制粘贴无法实现拖拽,找了很多方法,都存在各种问题和不方便,操作太麻烦,终于找到两行代码实现两系......
  • ls功能实现
    一、伪代码打开目录文件针对目录文件读取目录条目显示文件名关闭文件目录文件二、代码实现ls功能点击查看代码#include<sys/types.h>#include<sys/stat.h>#in......
  • 太牛逼了!用 Python 实现抖音上的“人像动漫化”特效,原来这么简单!
    关注微信公众号『数据分析与统计学之美』,后台回复"人像动漫画"获取本文完整代码和素材。前今天,女友拉着我和她玩儿抖音,就是这个​​人像动漫化​​的操作,顿时觉得很好玩儿......
  • 万字肝货 | 超全总结,Linux常用磁盘命令、文件命令!
    目录  ​​1、知识引入​​​  ​​2、linux操作系统的产生过程​​  ​​3、linux优点​​​  ​​4、linux体系结构​​​  ​​5、linux内核及发行版本​......
  • python实现RFM建模
    如果觉得文章写得好,如果你想要博客文章中的数据,请关注公众号:【数据分析与统计学之美】,添加作者【个人微信】,进群和作者交流!目录  ​​1、RFM模型的含义​​​  ​​2、......
  • python内置模块loggin日志实现单例封装
    1importlogging2fromconfigs.global_dataimportLogger345classLogHandler:6obj=None78def__init__(self):9self.file......