gccでOSコマンドを実行するプログラムについて。

投稿者: Anonymous

gccを使い、OSコマンドを実行する関数を作っています。
エラーコードがあったら、エラーコードを返したいのですが、エラーコードが返りません。
どうすればいいのでしょうか?

//stdlibとstdio.hが必要

char *LC(int a,char b)
{

 #define HOGE 500

  char str[255];
  static char st[HOGE]={'a'};
  FILE  *fp;

  sprintf(str,"gcc %c.c -o %c%d", b, b, a);
  fp = popen(str,"r");
  while(1){
    fgets(st,HOGE,fp);
    if(feof(fp)){
      break;
    }
  }
  pclose(fp);

  return st;
}

解決

gccの出力は不要であれば、system関数を使い、その返り値を評価すればよいと思います。
質問のケースで言えば、このような感じでしょうか?

int LC(int a,char b)
{
  char str[255];
  int result = 0;

  /*
   * 注: 標準出力、標準エラーからの出力は捨てるコマンドラインにする.
   */
  sprintf(str,"gcc %c.c -o %c%d > /dev/null 2>&1", b, b, a);
  result = system(str);
  /*
   * 注: system()の仕様に従い、WEXITSTATUSマクロでコマンドの実行結果
   * のみ取り出す.
   */
  return WEXITSTATUS(result);
}

gccの出力が必要であれば、
metropolisさんのコメントのように、pclose関数の戻り値を取得すればよいと思います。

回答者: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *