2016-06-06 2 views
0

В GThread У меня есть код как таковойтрубопровод STDERR в буфер

char *commandLine [1024]; 
sprintf(commandLine, "gcc myfile.c -o myfile.exe 2>&1"); 

FILE*   pipein_fp; 
extern FILE* popen(); 
static char  buffer [1024]; 

pipein_fp = popen(commandLine, "r"); 
while(fgets(buffer, 1024, pipein_fp) != NULL) g_print("\n%s", buffer); 
pclose(pipein_fp); 

так 2>&1 предполагается перенаправить поток ошибок на стандартный вывод и конвейерный g_print предполагается печатать выход Stderr ССАГПЗ в. Но он ничего не делает. Что я могу сделать неправильно?

+2

Вы уверены, что программа содержит ошибки? Если ошибок нет, он ничего не печатает для stderr. – Barmar

ответ

2

Ваш код имеет ошибку, пожалуйста, изменить

char *commandLine [1024]; 
sprintf(commandLine, "gcc myfile.c -o myfile.exe 2>&1"); 

в

char commandLine [1024]; 
sprintf(commandLine, "gcc myfile.c -o myfile.exe 2>&1"); 

Для sprintf, первый параметр char* str.

Вы можете прочитать how to control popen stdin, stdout, stderr redirection?

+0

Я не копировал эту часть и решил написать ее здесь. Вот как эта ошибка родилась, но ее все равно слишком поздно редактировать. Я поддержал, хотя я не могу представить его в качестве решения, потому что я слишком идиот, и код, который я собирал, был неплохим. – Malina

Смежные вопросы