system 函數

相關函數: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);
相關文章
相關標籤/搜索