Error_016 2023-09-17 13:28 采纳率: 27.3%
浏览 9

关于c++用popen调用cmd的问题


#include <iostream>
#include <cstdlib>

int main() {
    // 打开命令管道
    const char* command = "cmd.exe";
    FILE* pipe = popen(command, "r");
    if (pipe == NULL) {
        std::cerr << "popen failed, error code: " << errno << std::endl;
        return 1;
    }

    // 向命令提供输入
    char input[] = "echo Hello, world!";
    std::fwrite(input, sizeof(input), 1, stdin);

    // 从命令读取输出
    char buffer[128];
    std::string result;
    while (fgets(buffer, sizeof(buffer), pipe) != NULL) {
        result += buffer;
    }

    // 关闭管道
    pclose(pipe);
    std::cout << result << std::endl;

    return 0;
}

它会一直卡在while循环里面出不去,fgets的返回值一直不为null,不知道为什么

  • 写回答

2条回答 默认 最新

  • 彩虹里的小吉祥 2023-09-17 13:42
    关注

    你的代码中的问题在于你误解了popen函数的工作方式。popen函数创建一个管道,使得你可以通过stdin向命令提供输入,并通过stdout从命令读取输出。
    在你的代码中,你试图向stdin写入一个字符串,但是这是不可能的,因为stdin是一个标准输入流,它通常连接到一个键盘,而不是一个文件或管道。因此,你的代码无法正常工作,因为它试图向一个无法写入的流写入数据。
    为了解决你的问题,你应该使用fwrite向pipe写入数据,而不是stdin。你也需要处理命令执行的错误,以及确保在所有情况下都关闭管道。我的设备不支持发送代码框,我关注你一下,然后在私信里把代码给你发过去吧。

    制作不易,点个关注吧!
    求求了,我是一个小博主,很费劲的发了一篇,然后没人看。给我个支持,点个关注吧!谢谢!

    评论

报告相同问题?

问题事件

  • 创建了问题 9月17日

悬赏问题

  • ¥15 python怎么在已有视频文件后添加新帧
  • ¥20 虚幻UE引擎如何让多个同一个蓝图的NPC执行一样的动画,
  • ¥15 fluent里模拟降膜反应的UDF编写
  • ¥15 MYSQL 多表拼接link
  • ¥15 关于某款2.13寸墨水屏的问题
  • ¥15 obsidian的中文层级自动编号
  • ¥15 同一个网口一个电脑连接有网,另一个电脑连接没网
  • ¥15 神经网络模型一直不能上GPU
  • ¥15 pyqt怎么把滑块和输入框相互绑定,求解决!
  • ¥20 wpf datagrid单元闪烁效果失灵