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

stat命令的实现-mysate

时间:2022-10-15 10:55:06浏览次数:70  
标签:stat -- mysate long st 命令 printf sb

学习使用stat(1),并用C语言实现

提交学习stat(1)的截图

使用man 1 stat打开stat手册页:

命令选项:

-L, --dereference:跟随符号链接解析原文件而非符号链接;
-f, --file-system:显示文件所在文件系统信息而非文件信息;
-c,--format=FORMAT:以指定格式输出,而非默认格式;
显示文件信息可用格式控制符如下:
	%a:以八进制显示访问权限
	%A:以可读形式显示访问权限
	%b:显示占有块数
	%B:显示每一块占有的字节数
	%C:SELinux security context string
	%d:十进制显示文件所在设备号
	%D:十六进制显示文件所在设备号
	%f:十六进制显示文件类型
	%F:文件类型。Linux下文件类型主要分为普通文件、目录、字符设备文件、块设备文件、符号链接文件、套接字等
	%g:文件所有者组ID
	%G:文件所有者组名称
	%h:文件硬链接数
	%i:inode号
	%m:文件所在磁盘分区挂载点,比如/data
	%n:文件名称
	%N:单引号括起来的文件名称,如果是软链接,则同时显示指向的文件名称
	%o:optimal I/O transfer size hint
	%s:实际文件大小,单位字节
	%t:major device type in hex, for character/block device special files
	%T:minor device type in hex, for character/block device special files
	%u:所有者用户ID
	%U:所有者用户名称
	%w:文件创建时间,输出-表示无法得知
	%W:文件创建时间,输出Unix时间戳,0表示无法得知
	%x:可读形式输出最后访问时间atime
	%X:Unix时间戳输出最后访问时间atime
	%y:可读形式输出最后修改时间mtime
	%Y:Unix时间戳输出后修改时间mtime
	%z:可读形式输出最后状态改变时间ctime
	%Z:Unix时间戳输出最后状态改变时间ctime
	
	显示文件系统信息可用格式控制符有:
	%a:非超级用户可使用的自由block数
	%b:文件系统总block数
	%c:文件系统总文件节点数
	%d:可用文件节点数
	%f:可用文件block数
	%i:十六进制文件系统ID
	%l:最大文件名称长度
	%n:文件名称
	%s:一个块的大小,单位字节(for faster transfers)
	%S:一个块的基本大小,单位字节(用于统计block的数量)
	%t:十六进制输出文件系统类型
	%T:可读形式输出文件系统类型
--printf=FORMAT:以指定格式输出,而非默认格式。与--format作用类似,但可以解释反斜杠转义字符,比如换行符\n;
-t, --terse:简洁模式输出,只显示摘要信息;
--help:显示帮助信息;
--version:显示版本信息。

用stat显示文件信息:

用stat显示文件所在文件系统信息:

man -k ,grep -r的使用

使用man -k stat | grep 1查看用户命令

使用man -k stat | grep2查看相关函数

man 2 stat的使用

伪代码

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

产品代码 mystate.c,提交码云链接

#include
#include
#include
#include
#include
int main(int argc, char *argv[])
{
    struct stat sb;
    if (argc != 2) {
        fprintf(stderr, "Usage: %s \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("INode节点: %ld\n", (long) sb.st_ino);
    printf("文件类型: %lo (octal)\n",(unsigned long) sb.st_mode);
    printf("硬链接数: %ld\n", (long) sb.st_nlink);
    printf("用户ID和组ID: UID=%ld   GID=%ld\n",(long) sb.st_uid, (long) sb.st_gid);
    printf("块大小: %ld bytes\n",(long) sb.st_blksize);
    printf("文件字节数: %lld bytes\n",(long long) sb.st_size);
    printf("块数: %lld\n",(long long) sb.st_blocks);
    printf("最后改变时间(指属性): %s", ctime(&sb.st_ctime));
    printf("最后访问时间: %s", ctime(&sb.st_atime));
    printf("最后修改时间: %s", ctime(&sb.st_mtime));
    exit(EXIT_SUCCESS);

码云链接:https://gitee.com/wu-zhuohang/codes/v7rhxmzjse92t0d4cnku569

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

  • mystat

+stat

标签:stat,--,mysate,long,st,命令,printf,sb
From: https://www.cnblogs.com/wu-zhuohang/p/16793712.html

相关文章

  • 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:返回上......
  • Linux常用命令
    cd:切换目录用法:cd绝对路径切换路径cd相对路径切换路径cd~或者cd回到自己的家目录(root目录)cd-回到上一次所在目录cd..回到当前目录的上一......