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
相关产品推荐
相关产品推荐

