c popen не поймает stderr

Я пытаюсь использовать popen() чтобы поймать stderr вызова, но, конечно, похоже, что это не так. Есть идеи?

Мой код выглядит примерно так:

popen("nedit", "r");

Но я получаю весь этот мусор о не-utf8 на моем экране...

Ответ 1

popen дает вам дескриптор файла в процессе 'stdout, а не в stderr. Его первый аргумент интерпретируется как команда оболочки, поэтому вы можете перенаправлять его:

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

или, если вы вообще не хотите выпустить stdout,

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

(Любой другой файл, кроме /dev/null является приемлемым.)

Ответ 2

Если вы хотите отменить все сообщения об ошибках, вы можете использовать:

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