剛用到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...