web-dev-qa-db-ja.com

WEXITSTATUS(status)は何を返しますか?

WEXITSTATUS(status)の仕組みを理解しようとしています。 WEXITSTATUS(status)の戻り値が変数に追加されているコードを見つけました。

以下がスニペットです。

waitpid(-1, &status, 0);
counter += WEXITSTATUS(status);

WEXITSTATUSの戻り値はどのように計算できますか?

24
shaveenk

WEXITSTATUS(stat_val)はマクロです(したがって、実際には「return」ではなく、何かに「評価」します)。

どのように機能するかについては、使用するCコンパイラに付属するヘッダー( _#include_ を介して_<sys/wait.h>_ dである必要があります)で検索することをお勧めします。

このマルコの実装は、Cコンパイラごとに異なる場合があります。

マクロWIFEXITED(stat_val)が_0_と等しくない値を与えた場合、このマクロは正しい値のみを与えることに注意してください。

waitpid()のPOSIX仕様 からの逐語:

WEXITSTATUS(stat_val

WIFEXITED(stat_val)の値がゼロ以外の場合、このマクロは、子プロセスが渡したステータス引数の下位8ビットに評価されますto_ exit()またはexit()、または子の値main()から返されたプロセス。


特定のプログラムの戻りコードを追加する背後にある動機は、コードの作者と、できれば既存のドキュメントだけが知っています。

18
alk