zoukankan      html  css  js  c++  java
  • 系统调用跟踪——分析(一)

      通过strace工具可跟踪用户进程与Linux内核的调用交互,可看到其中的System Call(系统调用)情况;

    安装strace: apt-get instsall strace
    

      strace安装完成后执行:strace ls /data即可看到ls命令执行时所执行的系统调用情况,如下图所示:

    dir1.png

      程序执行后输出很多信息,有看到反复执行:openat与stat系统调用,但很多貌似和我们这次关心的没多大关系,过滤掉无关紧要的。
      找到如下信息:

    stat("/data", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
    openat(AT_FDCWD, "/data", O_RDONLY|O_NONBLOCK|O_CLOEXEC|O_DIRECTORY) = 3
    fstat(3, {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
    getdents64(3, /* 6 entries */, 32768)   = 168
    getdents64(3, /* 0 entries */, 32768)   = 0
    close(3)
    write(1, "apache-flume-1.8.0  code  deepin"..., 44apache-flume-1.8.0  code  deepin-wine  soft
    ) = 44
    

      从着当中我们可以看到这么几个系统调用:stat、openat、fstat、getdents64、close
      此时可通过网络或系统的man指令了解着几个系统调用的具体作用;

    stat:为获取文件状态系统调用
    openat:将打开目录/data获取它的文件描述符,返回值3即为文件描述符;
    fstat:获取文件描述符为3的文件状态
    getdents64:获取文件描述符为3的目录项
    close:关闭文件描述符3
    write:在获取到文件目录信息后将参数2中的信息标准输出到控制台
    

      通过上面的跟踪可看到此次ls命令执行过程中所发生的系统调用情况;通过使用这几个系统调用我们也可开发出类似ls的工具,下篇文章将介绍下图所示工具的开发

    使用Go所开发的工具

    文章首发地址:https://mp.weixin.qq.com/s/kWbtd1ThNdPIVBCcEDt3fg

  • 相关阅读:
    温故知新 将Date和String类型相互转换
    温故知新 线程
    温故知新 数组
    温故知新 集合
    温故知新 流(字节流与字符流)
    温故知新 jdbc 数据库调取封装
    Reds 持久化 高并发 高可用
    批量修改文件后缀名
    scala之旅-核心语言特性【高阶函数】(十)
    scala之旅-核心语言特性【使用混入组合类】(九)
  • 原文地址:https://www.cnblogs.com/softlin/p/15231301.html
Copyright © 2011-2022 走看看