stat命令的实现

stat命令的实现

一.任务详情

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

二.实现过程

关于stat命令

  • stat 命令用于显示 inode 内容
  • 语法
    stat [文件或目录]
  • 选项
    -L:支持符号连接
    -f:显示文件系统状态而非文件状态
    -t:以简洁方式输出信息
  • 输出
    文件名、大小、块、IO块、权限、文件类型等

man -k ,grep -r的使用


伪代码

读取文件;
调用函数stat();
依次打印;

代码

#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 buf;
        char *ptr;
        stat(argv[1], &buf);
        printf("  文件:%s\n",argv[1]);
        printf("  大小:%lld             ",(long long)buf.st_size);
        printf("块:%lld          ",(long long) buf.st_blocks);
        printf("IO 块: %ld   ",(long) buf.st_blksize);
        if(S_ISREG(buf.st_mode))
        {
                ptr="普通文件";
        }
        else if(S_ISSOCK(buf.st_mode))
        {
                ptr="套接字文件";
        }
        else if(S_ISLNK(buf.st_mode))
        {
                ptr="符号链接文件";
        }
        else if(S_ISBLK(buf.st_mode))
        {
                ptr="块设备文件";
        }
        else if(S_ISDIR(buf.st_mode))
        {
                ptr="目录文件";
        }
        else if(S_ISCHR(buf.st_mode))
        {
                ptr="字符设备文件";
        }
        printf("%s\n",ptr);
        printf("设备:%ld       ",(long)buf.st_dev);
        printf("Inode:%ld     ",(long)buf.st_ino);
        printf("硬链接:%ld\n", (long)buf.st_nlink);
        printf("Uid:%ld   ",(long)buf.st_uid);
        printf("Gid:%ld\n",(long)buf.st_gid);
        printf("最近访问:%s\n",ctime(&buf.st_atim));
        printf("最近更改:%s\n",ctime(&buf.st_mtim));
        printf("最近改动:%s\n",ctime(&buf.st_ctim));
}

运行结果:

码云链接:https://gitee.com/chen_sunyilongWANTED/stat/blob/master/stat

mystat与stat对比


很明显,mystat有许多东西是没有输出的

posted @ 2021-11-02 22:05  20191201陈孙一龙  阅读(44)  评论(0编辑  收藏  举报