相關函數:fork, execve, waitpid, popen 頭文件:#include <stdlib.h> 定義函數:int system(const char * string); 函數說明:system()會調用fork()產生子進程, 由子進程來調用/bin/sh-c string 來執行參數string 字符串所表明的命令, 此命令執行完後隨即返回原調用的進程. 在調用system()期間SIGCHLD 信號會被暫時擱置,SIGINT 和SIGQUIT 信號則會被忽略. 返回值: 1、若是 system()在調用/bin/sh 時失敗則返回127, 其餘失敗緣由返回-1.。 2、若參數string 爲空指針(NULL), 則返回非零值. 3、若是system()調用成功則最後會返回執行shell 命令後的返回值, 可是此返回值也有可能爲system()調用/bin/sh 失敗所返回的127, 所以最好能再檢查errno 來確認執行成功. 附加說明:在編寫具備 SUID/SGID 權限的程序時請勿使用system(), system()會繼承環境變量, 經過環境變量可能會形成系統安全的問題. 範例 #include <stdlib.h> main() { system("ls -al /etc/passwd /etc/shadow"); } 執行: -rw-r--r-- 1 root root 705 Sep 3 13 :52 /etc/passwd -r--------- 1 root root 572 Sep 2 15 :34 /etc/shadow
函數名: system 功 能: 發出一個DOS命令 用 法: int system(char *command); system函數已經被收錄在標準c庫中,能夠直接調用 程序例: #include <stdlib.h> #include <stdio.h> int main(void) { printf("About to spawn command.com and run a DOS command\n"); system("dir"); return 0; } 在windows中的shell是command,想必你們很熟悉shell接受命令以後作的事了。 windows中的狀況也相似,就是execl換了個又臭又長的名字,參數名也換的看了讓人發暈的,我在MSDN中找到了原型,給你們看看: HINSTANCE ShellExecute( HWND hwnd, LPCTSTR lpVerb, LPCTSTR lpFile, LPCTSTR lpParameters, LPCTSTR lpDirectory, INT nShowCmd ); 用法見下: ShellExecute(NULL, "open", "c:\\a.reg", NULL, NULL, SW_SHOWNORMAL);