3

プロセス完了ステータスに関するglibcのドキュメントには、マクロWEXITSTATUSが完了ステータスの下位8バイトを返すと記載されています。

マクロ:int WEXITSTATUS(int status)

WIFEXITEDのステータスがtrueの場合、このマクロは子プロセスからの終了ステータス値の下位8ビットを返します。

しかし、/usr/include/sys/wait.h言う:

# define WEXITSTATUS(status)    __WEXITSTATUS (__WAIT_INT (status))

そして、/usr/include/bits/waitstatus.h言及:

/* If WIFEXITED(STATUS), the low-order 8 bits of the status.  */
#define __WEXITSTATUS(status)   (((status) & 0xff00) >> 8)

私のエンディアンの概念がすべて台無しにされていない限り、これはどのように下位8ビットですか?または、libcは、データがスモールエンディアンの方法で保持されていると想定していますか?

4

1 に答える 1

4

これはエンディアンの問題ではありません。エンディアンとは、データがメモリに保存される方法を指します。ビッグエンディアンまたはリトルエンディアンのマシンで、ビット15から8、つまりマクロ引数(((status) & 0xff00) >> 8)の8番目から15番目の最下位ビットを抽出します。status

ステータスは2つの異なるものを参照しているため、ドキュメントとコメントは混乱を招きます。

終了するプロセスはステータスコードを返します。この終了ステータスにはint、ソースにタイプがあります(からの戻り値としてmain、またはへの引数としてexit)。ただし、値は0から255の間である必要があります。

waitおよびwaitpidシステムコールは、発信者へのバックも提供しますstatus。このステータスは異なります。元の終了ステータスの下位8ビットはビット15から8になりました。ドキュメントには、終了プロセスの観点からの終了ステータスのパッキングであるため、WEXITSTATUSが「下位8ビット」を返すと記載されていると思います。 。

于 2011-05-09T21:08:17.937 に答える