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

stat命令的实现-mysate

时间:2022-10-15 11:34:46浏览次数:68  
标签:stat mysate long st break 命令 printf sb

一、stat(1)

  • stat作用:用来显示文件的详细信息,包括inode, atime, mtime, ctime
  • stat格式:stat [OPTION]…FILE…
  • stat命令格式:
    • -L:显示符号链接
    • -f:显示文件所在的文件系统信息
    • -t:以简洁的方式输出摘要信息
  • stat输出内容:
    • File:显示文件名
    • Size:显示文件大小
    • Blocks:文件使用的数据块总数
    • IO Block:IO块大小
    • regular file:文件类型(常规文件)
    • Device:设备编号
    • Inode:Inode号
    • Links:链接数
    • Access:文件的权限
    • Gid、Uid:文件所有权的Gid和Uid
  • 学习截图


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


三、伪代码

声明结构体
读入命令行文件路径
调用stat()函数给结构体赋值
逐个打印结构体中的数据

四、产品代码 mystate.c的码云链接

#include <sys/types.h>
#include <sys/stat.h>
#include <time.h>
#include <stdio.h>
#include <stdlib.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("File type:                ");
    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("I-node number:            %ld\n", (long) sb.st_ino);
    printf("Mode:                     %lo (octal)\n",(unsigned long) sb.st_mode);
    printf("Link count:               %ld\n", (long) sb.st_nlink);
    printf("Ownership:                UID=%ld   GID=%ld\n",(long) sb.st_uid, (long) sb.st_gid);
    printf("Preferred I/O block size: %ld bytes\n",(long) sb.st_blksize);
    printf("File size:                %lld bytes\n",(long long) sb.st_size);
    printf("Blocks allocated:         %lld\n",(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);
}

五、测试代码,mystat 与stat(1)对比

标签:stat,mysate,long,st,break,命令,printf,sb
From: https://www.cnblogs.com/daijun123/p/16793687.html

相关文章

  • stat命令的实现-mysate
    学习使用stat(1),并用C语言实现提交学习stat(1)的截图使用man1stat打开stat手册页:命令选项:-L,--dereference:跟随符号链接解析原文件而非符号链接;-f,--file-system......
  • gitlab常用命令
    1.gitlab上打标签(1).上文件到gitlab仓库拉取gitlab项目[email protected]:backend_group/it/test2.git切换分支(切换到master)cdtest2gitcheckoutmaster查看状态gi......
  • git代码统计工具gitstat安装
    分析结果:常规的统计:文件总数,行数,提交量,作者数。活跃性:每天中每小时的、每周中每天的、每周中每小时的、每年中每月的、每年的提交量。作者数:列举所有的作者(......
  • DOS窗口命令和单表简单查询
    相关术语:DB:数据库:在硬盘上以文件的方式存在DBMS:数据库管理系统:例如mysql,oracle,sqlserver…SQL:一门适用于所有DBMS,对DB进行操作的标准规划语言,DQL:数据库查询语句select,D......
  • 实用:python中命令调度分发器
    '''要求:程序员可以方便的注册函数到某个命令,用户输入命令时,路由到注册的函数,如果没有此命令,执行默认函数,用户输入input分析:输入命令映射到一个函数,并执行这个函数,应该c......
  • 使用Windows命令行打开任务计划程序
    1.点击“Win+R”,打开运行对话框。2.输入“CMD”,然后点击“确定”按钮。3.输入“taskschd.msc”或“taskschd”命令,然后点击回车。4.可以看到任务计划程序已经打开。......
  • MVN命令之clean,compile,build,install,package区别
    1、clean:执行该命令会删除项目路径下的target文件,但是不会删除本地的maven仓库已经生成的jar文件2、compile:编译命令,只编译选定的目标,不管之前是否已经编译过,会在你的项目......
  • Linux系统编程09-stat和lstat
    #include<sys/types.h>#include<sys/stat.h>#include<unistd.h>intstat(constchar*pathname,structstat*statbuf);作用:获取......
  • Linux系统编程10-模拟实现 ls -l 命令
    //-rw-rw-r--1usernamegroupname112WedSep1422:08:302022hello.txt#include<stdio.h>#include<sys/types.h>#include<sys/stat.h>#include<unistd.h>#......
  • 常用的Dos命令
    常用Dos命令盘符切换:打开cmd命令窗口后,输入切换的盘符(大小写都可以)+:查看当前目录下的所有文件:输入dir命令切换目录:cd(changedirectory)例:cd/df:返回上......