c popen不会抓住stderr

我正在尝试使用popen()来捕获调用的stderr,但当然它似乎并没有这样做。 有任何想法吗?

我的代码看起来或多或少像这样:

 popen("nedit", "r"); 

但是我在屏幕上得到了关于非utf8的所有垃圾……

popen为进程’stdout提供文件句柄,而不是stderr。 它的第一个参数被解释为shell命令,因此你可以在其中进行重定向:

 FILE *p = popen("prog 2>&1", "r"); 

或者,如果你根本不想要stdout,

 FILE *p = popen("prog 2>&1 >/dev/null", "r"); 

(除了/dev/null之外的任何其他文件也是可以接受的。)

如果要丢弃所有错误消息,则可以使用:

 popen("nedit 2>/dev/null", "r");