在linux c程式設計時,system函式有時是很好用的。例如在c中需要呼叫openssl時可以這樣呼叫:
int cy_system(const char *command, int *_status)
// otherwise, ret == cmd返回資訊
status = ret;
if (!wifexited(status))
*_status = wexitstatus(status);
return 0;
}sprintf(scmd, "openssl pkcs12 -export -clcerts -passin pass:%s -passout pass:%s -in %s%s.crt -inkey %s%s.key -out %s%s.pfx > /dev/null 2>&1",
password, password, opencont_path, userid, opencont_path, userid, opencont_path, userid ); //生成pfx檔案
if (cy_system(scmd, &i) == -1)
但是在執行的過程中卻發現程式無緣無故就死掉了,而且並沒有生成core檔案。後來經過分析發現是訊號問題,在我們前面的執行中為了處理殭屍程序,我們對sigchld的處理方式是呼叫kill -15。
而在system函式中實際執行的原理是ford出乙個子程序,這個子程序會呼叫exec* 來執行shell命令。執行完畢之後會產生乙個sigchld訊號,而對於這個訊號,我們設定的是父程序接收到後會執行kill -15 中斷程序,而在linux中sigchld預設的處理方式是忽略的,改為預設即可。在程式執行時無端死掉而且沒有產生core檔案應先考慮訊號問題,其他的可以通過core檔案來分析原因。
C語言中的SYSTEM函式
system函式 是可以呼叫一些dos命令,比如 system cls 清屏,等於在dos上使用cls命令 下面列出常用的dos命令,都可以用system函式呼叫 assoc 顯示或修改副檔名關聯。at 計畫在計算機上執行的命令和程式。attrib 顯示或更改檔案屬性。break 設定或清除擴充套件...
C語言中的system函式引數詳解
函式名 system 功 能 發出乙個dos命令 用 法 int system char command system函式已經被收錄在標準c庫中,可以直接呼叫 system 函式用於向作業系統傳遞控制台命令列,以windows系統為例,通過system 函式執行命令和在dos視窗中執行命令的效果是一...
C語言system 函式
system 函式功能強大,很多人用卻對它的原理知之甚少先看linux版system函式的原始碼 include include include include int system const char cmdstring if pid fork 0 else if pid 0 else retu...