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

stat命令的实现-mysate

时间:2022-10-16 14:56:16浏览次数:46  
标签:stat mysate long st 命令 printf sb include

学习stat(1)

解决方法

禁用 man 的 SECCOMP

export MAN_DISABLE_SECCOMP=1

永久解决:修改用户目录下的~/.bashrc文件进行配置

vim ~/.bashrc

在最后一行加上

export MAN_DISABLE_SECCOMP=1

:wq 保存退出

关于stat

作用:获取文件信息
头文件:include <\sys/types.h> #include <\sys/stat.h> #include <\unistd.h>
函数原型:int stat(const char *path, struct stat *buf)
返回值:成功返回0,失败返回-1;
参数:文件路径(名),struct stat 类型的结构体

man -k ,grep -r的使用

man -k:根据关键字搜索联机帮助

grep -r :快速搜索在目录下面的含有关键字的文件

man -k stat

grep -r status

在编写代码的过程中,会遇到很多不知道的类型和宏定义,需要使用grep -r xx /usr/include

例如发现有一个变量:st_size不清楚其类型意义。使用grep -r st_size /usr/include查询

man -k stat | grep 2

伪代码

  1. 判断输入中是否包含文件参数,如果有则继续,没有则提示用户输入错误

  2. 声明结构体,并调用stat()函数给结构体赋值

  3. 逐个取出结构体中的数据并输出即可

    • 依次打印输出节点ino
    • 文件类型mode
    • 文件的连接数nlink
    • 用户ID uid和组ID gid
    • 块大小blksize
    • 字节数size
    • 块数目blocks
    • 三个时间atime、mtime和ctime
  4. 注意文件的mode需要switch来判断

产品代码 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 &lt;pathname&gt;\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("文件: '%s'\n",argv[1]);
    printf("大小: %lld      ",(long long) sb.st_size);
    printf("块: %lld               ",(long long) sb.st_blocks);
    printf("IO块: %ld\n",(long) sb.st_blksize);
    printf("设备: %ld      ",sb.st_dev);//文件设备编号
    printf("Inode: %ld      ",sb.st_ino);//文件i节点标号
    printf("硬链接: %ld\n", (long) sb.st_nlink);
    printf("权限: %lo (octal)      ",(unsigned long) sb.st_mode);
    printf("Uid=%ld       Gid=%ld\n",(long) sb.st_uid, (long) sb.st_gid);
    printf("最近更改: %s", ctime(&sb.st_ctime));
    printf("最近访问: %s", ctime(&sb.st_atime));
    printf("最近改动: %s", ctime(&sb.st_mtime));
    printf("创建时间: -\n");
    exit(EXIT_SUCCESS);
}

测试代码

分别用mystat和stat查看文件mystat.c的信息

标签:stat,mysate,long,st,命令,printf,sb,include
From: https://www.cnblogs.com/cqszxy2020/p/16796217.html

相关文章

  • stat命令的实现-mysate
    stat命令的实现-mysate(必做)学习任务:学习使用stat(1),并用C语言实现提交学习stat(1)的截图man-k,grep-r的使用伪代码产品代码mystate.c,提交码云链接测试代码,mysta......
  • gitee常用命令
              ————————————————版权声明:本文为CSDN博主「日拱一卒~」的原创文章,遵循CC4.0BY-SA版权协议,转载请附上原文出处链接及本......
  • static关键字
    packageobj2;/***@authorliu$*@version1.0**1.static关键词的使用(静态的)*2.用来修饰:属性、方法、代码块、内部类**3.用来修饰属性:静态变量(类变量)*......
  • SQL1001N is not a valid database name. SQLSTATE=2E000
    $db2createdbhcba_appstoreusingcodesetUTF-8territoryCNCOLLATEUSINGSYSTEM出现错误SQL1001N"hcba_appstore"isnotavaliddatabasename.SQLSTATE=2E0......
  • stat命令的实现-mysate
    学习目标提交学习stat(1)的截图man-k,grep-r的使用伪代码产品代码mystate.c,提交码云链接测试代码,mystat与stat(1)对比,提交截图提交学习stat(1)的截图安装man手册......
  • redis:通用命令
    通用指令是部分数据类型的,都可以使用的指令,常见的有:KEYS:查看符合模板的所有keyDEL:删除一个指定的keyEXISTS:判断key是否存在EXPIRE:给一个key设置有效期,有效期到......
  • 补:java中static的用法总结
    关于java在static中的用法,大致可以总结为以下三个模块:其一为:静态变量某些特定的数据在内存中只有一份,而且能被一个类的所有实例对象共享。可以使用类名.变量名的形式来访......
  • gdb命令
    调用gdb编译需要在cc后面加-g参数再加-o;#gdb调试文件:启动gdb(gdb)l:从第一行开始列出源码(gdb)breakn:在第n行处设置断点(gdb)breakfunc:在函数func()的入口处......
  • Linux命令
    命令查询man-kxxx查询各种命令。版本uname-a内核版本号cat/etc/issueUbuntu版本号sudolsb_release-aUbuntu发行版系统procinfo显示系统状态/proc/sys动态修......
  • git命令简记
    一般来说,我们本地如果想要使用Git管理一些资源文件,首先我们需要有一个仓库才行。常用的方式莫过于,第一去Gitlab/Github先创建一个仓库,然后再拉到本地,那这个时候我们就......