2013-03-24 54 views
2

我試圖從我的C程序在Linux中編譯某些文件,並給它們評分。 如果文件沒有編譯,我想給零分。我已經設法這樣做了,但在這種情況下我遇到了一個問題,因爲gcc正在向屏幕輸出消息(稱爲編譯錯誤)。當從C程序調用GCC時抑制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

如何將stderr重定向到文件? – 2013-03-24 12:57:41

+0

必須是文件嗎?我不想爲此創建一個文件。 – Jjang 2013-03-24 12:58:11

+1

重定向到'/ dev/null' - 沒有新文件將被創建 – user93353 2013-03-24 12:58:36

回答

3

在C標準中,freopen功能相關聯的給定流(stderr)與給定的路徑("/dev/null")的一個文件中,指定其模式("w")。

#include <stdio.h> 

freopen ("/dev/null", "w", stderr);