gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:54:41 25 4
gpt4 key购买 nike

我正在编写一个将要进行性能监控的 C++ 应用程序。我正在考虑将对 iostat 的调用包装在一个 exe 中。 (出于技术原因必须这样做,我不想深入探讨)。

我的问题是,如果我将对 iostat 的调用包装在一个 exe 文件中,那是不是非常愚蠢? (在性能方面)

例子:

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

傻吗?或者有更好的方法吗?

编辑:没关系,我可以通过阅读/proc/diskstats 和其他文件来获得我需要的东西。

最佳答案

My question is, if I wrap calls to iostat inside of an exe, is that incredibly stupid?

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

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

您说有一些原因您不想深入了解为什么需要使用可执行文件(从 C/C++ 编译)。我完全不知道这些原因可能是什么,因为如果你想做你想做的事(调用 iostat),你需要从你的 C++ 程序调用系统的 shell 解释器(通常是“bash”)。那么,运行调用 bash 来运行命令 (iostat) 的程序 (C++) 与调用 bash 来运行运行命令 (iostat) 的脚本之间有什么区别。我想不出有什么可以使一个成为可能而另一个则不能。无论如何,这不是世界末日,您可以按照有关 invoking a command and retrieving its output 的说明进行操作。使用 popen()。

第二个反对意见是 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com