繁体   English   中英

在应用程序中调用linux命令行工具

[英]Calling linux command line tools inside application

我正在编写一个将要进行性能监控的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和其他文件得到我需要的东西。

我的问题是,如果我在exe中包含对iostat的调用,那是非常愚蠢的吗?

我不会称之为“令人难以置信的愚蠢”,但它肯定不会让你获得诺贝尔奖。 我看到更糟糕了。 这个想法有两个令人反感的事情:

  1. 当您使用shell命令时,您真的应该使用shell脚本。
  2. iostat命令只是一个读取一组标准Linux文件的简单程序,因此,为什么不直接自己阅读它们。

你说你有理由不想了解为什么需要使用可执行文件(从C / C ++编译)。 我完全不知道这些原因是什么,因为如果你想做你想做的事情(调用iostat),你需要从你的C ++程序调用系统的shell解释器(通常是“bash”)。 那么,运行调用bash运行命令(iostat)的程序(C ++)和调用bash来运行运行命令(iostat)的脚本之间的区别是什么。 我无法想到任何可能使一个成为可能而另一个成为可能的东西。 在任何情况下,这不是世界末日,您可以按照这些有关调用命令和使用popen() 检索其输出的说明进行操作。

第二个反对意见是iostat非常简单(如此此处所示 )。 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输出所需的字符串解析比直接从这些系统文件中检索所需数据所需的解析要简单得多。

然而,做你提出的建议毕竟不是那么可怕。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM