我正在尝试从Linux中的C程序编译某些文件并给它们分级。 如果文件没有编译,我想给零级。我已经设法这样做了,但是在这种情况下我遇到了问题,因为gcc正在向屏幕打印一条消息(所谓的编译错误)。
我一直在谷歌搜索并在那个男人身上寻找一面会阻止它这样做的旗帜,但还没有找到它。
有谁知道旗帜是什么? 或者,也许还有其他解决方案?
这是我的代码:
//child process
if((pid=fork())==0)
{
execl("/usr/bin/gcc", "/usr/bin/gcc", "-o", outpath, fullpath,NULL);
}
else
{
wait(&stat);
if(WIFEXITED(stat))
{
stat=WEXITSTATUS(stat);
if(stat!=0)
{
if(write(fdresult,",0\r\n",4)==-1)
{
perror("Writing result.csv has failed.");
exit(1);
}
continue;
}
}
}
注意:此代码有效。我只需要一种方法来防止gcc在文件无法编译时打印错误。
谢谢!
编辑: 尝试添加
dup2("/dev/null",2);
就在execl之前,但gcc仍打印出消息。
答案 0 :(得分:3)
在C标准中,freopen
函数将给定流(stderr
)与给定路径("/dev/null"
)的文件相关联,并指定其模式("w"
)
#include <stdio.h>
freopen ("/dev/null", "w", stderr);