C++与Linux命令行交互有system()和popen()两种方式。system()直接执行命令但阻塞程序;popen()创建管道实现双向通信,能灵活接收输出或发送输入,适用于复杂交互场景。
C++程序与Linux命令行交互时,主要有两种方式:使用系统调用或利用管道机制。

长期稳定更新的攒劲资源: >>>点此立即查看<<<
最直接的方式是调用system()函数。该函数接受一个字符串参数,用于指定要执行的Linux命令。例如以下示例:
#include int main() {system("ls -l");return 0;} 程序运行后,会执行ls -l命令,并在屏幕上显示目录列表。需要注意的是,system()是阻塞调用——只有在命令执行完毕后,程序才会继续执行后续代码。
如果system()不够灵活,popen()提供了更高级的交互方式。它允许在C++程序中创建管道,与外部进程进行双向通信:既能接收命令的输出,也能向命令发送输入。以下是一个封装示例:
#include #include #include #include std::string exec(const char* cmd) {std::array buffer;std::string result;std::shared_ptr pipe(popen(cmd, "r"), pclose);if (!pipe) throw std::runtime_error("popen() failed!");while (fgets(buffer.data(), buffer.size(), pipe.get()) != nullptr) {result += buffer.data();}return result;}int main() {std::string output = exec("ls -l");std::cout << output;return 0;} 该示例通过popen()执行ls -l,逐行读取输出并存储到字符串中,最后打印到控制台。相比system(),管道方式更加灵活:可以处理标准输出和错误流,甚至主动向命令发送数据。
总结:system()简单直接,适合“只管执行、不关心结果”的场景;而popen()更像一个可控的交互通道,在实际开发中更推荐优先考虑。
侠游戏发布此文仅为了传递信息,不代表侠游戏网站认同其观点或证实其描述