ソフトウェア開発者の日常

こだわりなく書きたいことを書いていきます。

Linux環境のC言語で、実行ファイルを呼び出して、結果を取得する方法

答えにたどり着くまでに、いろいろ検索していました。

f:id:AJYA:20130208220836j:plain

photo credit: Stuck in Customs via photopin cc

 

他のソフトウェアベンダーが開発したアプリと、自社のアプリが連動できる方法があるのかないのか調査をしています。

自社のアプリは、Linuxで動作するので、他のソフトウェアベンダーのアプリもLinuxで動作する必要があります。

 

あるソフトウェアベンダーのアプリの試用版は、

# ./test -f test.log

で起動した後に、

# echo $?

とすれば、戻り値が取得できるところまでは情報がもらえました。

 

つまずいたところ 

自社のアプリはC言語で作っているので、C言語のsystem関数を使って、

int     ret;
ret = system( "./test -f test.log" );
printf( "%d", ret );

としすれば、同じように戻り値が取得できると考えていましたが、結果は異なる値が取得できました。

 

解決策

一時はシェルで処理しないといけないのかと考えたりしていましたが、いろいろ検索した結果、system関数の戻り値をWEXITSTATUSマクロを使って値を取り出せば、system関数で起動したアプリケーションの戻り値が取得できることがわかりました。

int     ret;
ret = system( "./test -f test.log" );
printf( "%d", WEXITSTATUS(ret) );

 

こちらのページでもWEXITSTATUSマクロを紹介されているので、最初から読めばよかったです。

Man page of SYSTEM