system函式返回值

2021-06-23 06:34:55 字數 1776 閱讀 9008

剛用到system函式,要根據其返回值來做進一步操作,可是system的返回值並不等於其呼叫的程式的返回值,man了沒看懂,後來在網上搜尋了一下,終於看到了乙個dx的理解,記錄之。

引自:原文

要分成兩部分來說: 

1,在程式中,用exit來設定程序的退出值時,雖然該函式的引數型別為int型,但再父程序中只能取到其值的低8位.所以用exit返回值時,高於255的值是沒有意義的. 

2,對於system函式,返回值是由兩部分組成的,低8位值表示所執行的指令碼在執行過程中所接收到的訊號值,其餘的位表示的指令碼exit退出時所設定的值

測試**:u'v0o a-g0k&^f

#include

int main()

ret0  ret0

ret256  ret1

ret512  ret2

ret768  ret3

ret1024  ret4

ret1280  ret5

ret1536  ret6

ret1792  ret7

ret2048  ret8

ret2304  ret9

ret2560  ret10

ret2816  ret11

ret3072  ret12

ret3328  ret13

ret3584  ret14

如果還不放心請看下面的**:

包含檔案

#include

#include

#include

先寫乙個被呼叫的函式

==================================

#include

int main()

==================================

編譯後生成乙個"rt"的可執行檔案

執行結果

==================================

return 10.

==================================

再寫乙個呼叫system的程式

==================================

#include ;

#include ;

#include ;

#include ;

int main()

else

printf("cp exit illegal![%d]/n", errno) ;}~

[tiantao@probe sys_test]$ cat sys_test.cpp

#include ;

#include ;

#include ;

#include ;

int main()

else

printf("cp exit illegal![%d]/n", errno) ;

}==================================

編譯後執行結果

==================================

return 10.

wifexited(status):1

wexitstatus(status):10

cp exit normal![0]

exit staus = [a]

==================================

可以看到:

wexitstatus(status)可以得到呼叫程式的返回值。

windows下system函式返回值

在dos下,system 只是做乙個呼叫其他程式的工作,只要呼叫成功就返回0,不成功就返回 1。它不能得到被呼叫的程式的執行結果。要得到其他程式的執行的結果,要用spawn 這個家族的函式。linux和windows中system的不同之處在於 如果子程式呼叫成功,但執行失敗時,linux下的sys...

Linux中system函式返回值詳解

system 庫函式使用fork 2 建立乙個子程序,該子程序使用execl 3 執行指定的shell命令,execl bin sh sh c command,char 0 system execute a shell command include int system const char co...

Unix系統中system函式的返回值

網上關於system函式的返回值說明很多很詳細但卻不直觀,這裡搬出apue 3rd editon中實現system函式的 來說明其返回值。include include include int system const char cmdstring else if pid 0 else return...