Return value about System("command")

System函數:

是由fork、execve和waitpid三個系統調用實現的。
例如執行:system("ls /tm") --返回值爲256

所以如果execve出錯,則直接調用_exit(256),所以變量ret的值等於256.
在system函數執行時,會啓動一個子進程運行shell,然後通過將ls /tm作爲參數傳給shell,如果shell命令運行有錯,就調用exit XXX作爲system的返回值返回,而XXX是system函數的返回值,而不是shell運行ls /tm後的返回值。

 

Exit函數:
exit時,退出狀態碼只能是一個字節,超過部分被截取.
在父進程獲取其狀態時,把這個字節的數據放在了低地址第二個字節位置了.這些都是對補碼操作的.

因此,exit (-1) 和exit (255)時,父進程取的狀態碼是一樣的,你無法區分

因此,我們一般只根據退出狀態爲0或則非0來判斷成功或失敗,而不做進一步的區分.

 

注意:

     如果把system的返回值除以256就可以得到真正的返回值了,因爲system()返回的結果分兩個部分,前面是命令的返回值,後面是運行因爲信號終止時的信號值。所以要/256就是這個原因。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章