将stderr传送到缓冲区

时间:2016-06-06 06:46:45

标签: c windows gcc gtk stderr

在GThread中我有这样的代码

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应该将stderr重定向到stdout,并且管道g_print应该打印出gcc的stderr输出。但它没有任何作用。 我可能做错了什么?

1 个答案:

答案 0 :(得分: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?