答案是使用std::system()函数可执行系统命令,需包含cstdlib头文件,通过传入const char*类型命令字符串调用,返回值表示执行是否成功;跨平台时应根据预定义宏选择对应命令如_win32或__linux__;若需获取输出可用popen()函数读取管道内容,但应注意避免命令注入风险。

在c++中调用系统命令,最常用的方法是使用标准库中的 std::system() 函数。这个函数定义在 cstdlib 头文件中,可以执行操作系统支持的任意命令。
使用 std::system() 执行系统命令
std::system() 接收一个C风格字符串(const char*),表示要执行的命令。命令会通过操作系统的默认shell来运行。
示例代码:
#include <iostream>
#include <cstdlib>
int main() {
std::cout << “开始执行系统命令n”;
int result = std::system(“dir”); // windows 下列出目录
// int result = std::system(“ls -l”); // Linux/macOS 下使用
if (result == 0) {
std::cout << “命令执行成功n”;
} else {
std::cout << “命令执行失败n”;
}
return 0;
}
跨平台命令注意事项
不同操作系统支持的命令不同,编写跨平台程序时需要判断平台:
立即学习“C++免费学习笔记(深入)”;
- Windows 常用命令如:dir, ping 127.0.0.1
- Linux/macos 常用命令如:ls, ps aux
可通过预定义宏区分平台:
#if defined(_WIN32)
std::system(“dir”);
#elif defined(__linux__)
std::system(“ls -l”);
#else
std::system(“ls”);
#endif
获取命令输出与更安全的替代方案
std::system() 只能知道命令是否成功,无法直接获取输出内容。如果需要读取命令输出,可考虑以下方法:
- 将命令结果重定向到临时文件,再用C++读取文件
- 在Linux下使用 popen() 函数(需包含 cstdio)
示例(Linux/macOS):
#include <cstdio>
#include <iostream>
int main() {
FILE* pipe = popen(“ls”, “r”);
if (!pipe) return -1;
char buffer[128];
while (fgets(buffer, sizeof(buffer), pipe)) {
std::cout << buffer;
}
pclose(pipe);
return 0;
}
基本上就这些。std::system() 简单直接,适合快速调用系统命令,但要注意安全性,避免拼接不可信输入,防止命令注入风险。


