我正在编写一个将进行性能监视的C++应用程序。我当时只是想在exe中包装对iostat的调用。 (出于技术原因,必须以这种方式完成操作,我宁愿不去讨论)。

我的问题是,如果我在exe内包装对iostat的调用,这会变得非常愚蠢吗? (在性能方面)

例:

while (true) {
   every 200ms
      make system call to iostat, store results in my_data_structure
      do some math on my_data_structure
}

笨?或者,还有更好的方法?

编辑:没关系,我可以通过读取/ proc / diskstats和其他文件来获得所需的内容。

最佳答案



我不会称其为“非常愚蠢”,但是它肯定不会获得诺贝尔奖。我看得更糟。这个想法有两个令人讨厌的事情:

  • 使用shell命令时,实际上应该使用shell脚本。
  • iostat命令只是一个简单的程序,它读取一组标准Linux文件,因此,为什么不直接自己读取它们。

  • 您说的某些原因是您不想进入为什么需要使用可执行文件(从C / C++编译)的原因。我完全不知道这些原因是什么,因为如果您想做自己想做的事情(称为iostat),则需要从C++程序中调用系统的Shell解释器(通常是“bash”)。因此,运行调用bash来运行命令的程序(C++)(iostat)和调用bash来运行运行命令的脚本(iostat)之间有什么区别。我没有什么能使一个成为可能,而另一个则没有。无论如何,这不是世界末日,您可以使用popen()遵循有关invoking a command and retrieving its output的这些说明。

    第二个反对意见是,iostat非常简单(如herehere所示)。 iostat程序实际上所做的只是从手册中列出的文件夹(如/proc)中的标准系统监视伪文件读取数据:
       /proc/stat contains system statistics.
    
       /proc/uptime contains system uptime.
    
       /proc/diskstats contains disks statistics.
    
       /sys contains statistics for block devices.
    
       /proc/self/mountstats contains statistics for network filesystems.
    
       /dev/disk contains persistent device names.
    

    这意味着,根据您的特定问题,很可能直接从这些文件中读取所需的内容(或者从iostat的源代码中获取一些代码即可)。 iostat的重点是从这些文件中读取数据,并使它们“易于阅读”并按要求进行格式化。我怀疑在程序中解析iostat的输出所必须进行的字符串解析是否比直接从那些系统文件中检索所需数据所需的解析简单得多。

    但是,按照您的建议做事可能并不那么糟糕。

    关于c++ - 在应用程序内部调用linux命令行工具,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22055158/

    10-11 18:53