You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言使用popen调用curl时如何屏蔽其标准输出的进度信息

Linux下C调用curl屏蔽进度输出的方法

原因

你观察到的进度统计信息不是curl发往标准输出(stdout)的内容,而是默认发往标准错误(stderr)的传输进度条。这部分内容不会进入popen创建的stdout读管道,会直接继承你程序的stderr描述符输出到终端,和请求路径是否携带/plain参数无关。

解决方法

修改popen传入的curl命令,任选以下一种方式即可:

  • 加-s(silent)参数:执行命令改为curl -s ipecho.net/plain,直接关闭curl所有进度、提示类输出,不会再打印进度统计。
  • 加-sS参数组合:执行命令改为curl -sS ipecho.net/plain,正常请求时不输出进度条,仅请求出错时输出错误信息到stderr,方便排查问题,是生产场景更推荐的用法。
  • 重定向丢弃stderr:如果不想调整curl参数,可通过shell重定向把stderr全部丢弃,命令改为curl ipecho.net/plain 2>/dev/null,该方式会丢弃curl所有发往stderr的内容,包括进度条和错误提示。

参考修改代码

// 以-sS参数模式为例
FILE *fd = popen("curl -sS ipecho.net/plain", "r");
if (fd == NULL) {
    perror("popen调用失败");
    // 补充你的错误处理逻辑
    return -1;
}
fgets(buffer, BUFFER_CONTENTS_MAX, fd);
pclose(fd);

内容的提问来源于stack exchange,提问作者R. Lambert

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 07:24:15