从C++运行命令
Running a command from C++
要从 Linux 中的 C++ 获取 CPU 信息,我只需使用:
if (!system("cat/proc/cpuinfo")) cout <<"Error" <<endl;
更新:问题是我没有得到输出
它告诉你system
返回一个值,而你没有检查它,所以(在这种情况下)如果system
失败,你不会知道它。
假设您想在 Linux 上以编程方式获取有关 CPU 的信息(而不仅仅是在 stdout 终端上显示/proc/cpuinfo
,就像您对 system
的调用那样),您应该更好地阅读文件/proc/cpuinfo
ifstream fcp("/proc/cpuinfo");
std::string lin;
while (!fcp.eof()) {
lin = fcp.getline ();
// parse appropriately the file fcp, e.g.
if (lin.find("vendor_id") >= 0)
// do something useful
上面的代码片段不完整。您必须完成它才能从/proc/cpuinfo
中提取您真正想要的信息。
当然,您可以通过其他方式阅读/proc/cpuinfo
(例如 fopen
, fgets
, sscanf
à la C)....如果您真的想读取某些命令的输出(在您的情况下它是无用的),请考虑popen
你也许会很高兴只调用 uname(2) syscall(它提供的信息比 /proc/cpuinfo
少得多)。
谷歌搜索 cpufreq 或 cpufrequtils 给出了这个
该函数返回一个值,指示调用是否成功。
程序忽略此值,这可能会导致潜在问题。
这就是您收到编译器警告的原因。
这是一个编译器警告,告诉您您的代码可能不是您想要编写的代码。 C++ 中的 system
函数返回一个 int
值,该值通常包含您使用 system
运行的命令的状态代码。
在这种情况下,如果该数字不是 0(即 if(system("cat /proc/cpuinfo") != 0)
),则可能需要处理错误。
Linux 有一个独特的开放函数,称为 popen
,它允许您挂接到终端命令的 stdout。
您可以使用以下代码从终端命令读取任何输出:
FILE *pF = popen(aCmd, "r");
if(!pF)
{
return "ERROR";
}
char cChar = ' ';
std::string rtnStr = "";
while(!feof(pF))
{
cChar = fgetc(pF);
if(cChar == 'n')
{
break;
}
rtnStr += cChar;
}
并使用命令cat /proc/cpuinfo
获取 CPU 信息。您还可以添加| grep
后跟"MHz"、"型号"或"内核"等内容以了解详细信息。
- 使用VS Code和CMake Tools运行自定义命令
- 运行命令 "rosbag play example.bag" 时出错。找不到与插件 rosbag/NoEncryptor 对应的库
- 无法在 geany 上运行代码。无法执行构建命令
- 通过窗口从C++代码运行 WSL 命令
- 如何使用传递给编译器的相同参数在 cmake 中运行命令?
- 有没有办法让我编写一个可以在Windows和Linux上运行的命令行游戏?
- 使用 system() 函数在C++程序中运行 cmd 命令
- 程序运行,但文件无法打开.C++中的命令行
- 在 c++ 中运行命令,然后在该程序中运行命令
- 使用 Qt 运行 Windows PowerShell 命令
- 终端命令在程序运行后自动打开图形
- 使用 (cin) 用户输入将其粘贴到 std::system 中,并在另一个终端中运行带有输入的命令
- 线程保持运行并执行命令
- 选择特定版本的 Visual Studio 命令行工具包,并根据特定版本的C++运行时环境编译文件
- 有没有办法根据命令行参数定义数组大小?运行时与编译时实例化?
- C++程序编译器在使用g++命令编译后自动运行exe文件
- 如何在Qt应用程序中通过终端命令运行分离的应用程序
- 在 中执行行命令C++运行而不返回预期结果
- 生成文件:在全局变量初始化之前通过"make all"命令运行 bash 脚本
- 将XXD作为自定义命令运行