2011-05-09 43 views
2

glibc documentation on process completion status指出宏WEXITSTATUS返回完成狀態的低位8字節。glibc文檔和字節順序

宏:int WEXITSTATUS(INT狀態)

如果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

這不是一個排序問題。字節順序是指數據如何存儲在內存中;在大端或小端機器上,(((status) & 0xff00) >> 8)提取第15至8位,即status宏參數的第8至第15最低有效位。

文檔和註釋很混亂,因爲狀態指的是兩個不同的東西。

退出的過程返回狀態碼。此退出狀態具有源類型int(或者作爲從main返回值,或作爲參數exit),然而,該值應爲0 255

之間和

waitwaitpid系統調用還提供了一種 status回給來電者。這種狀態是不同的;原始退出狀態的低8位現在位於15到8位。我假設文檔中說WEXITSTATUS返回「低位8位」,因爲這是退出過程的退出狀態的打包。

+0

該文檔顯示「低8位」,因爲儘管子進程可以有任何「int」返回值,但在Posix環境中,只有該狀態的最低有效8位返回給父進程。 http://pubs.opengroup.org/onlinepubs/009695399/functions/_exit.html – JeremyP 2011-05-10 11:11:18