複製鏈接
請複製以下鏈接發送給好友

system()

鎖定
[1]  system()—執行shell命令也就是向dos發送一條指令。
相關函數fork, execve, waitpid, popen頭文件:#include <stdlib.h>定義函數:int system(const char * string);
system(pause)可以實現凍結屏幕,便於觀察程序的執行結果;system(CLS)可以實現清屏操作。而調用color函數可以改變控制枱前景色和背景,具體參數在下面説明。
例如,用 system(color 0A); 其中color後面的0是背景色代號,A是前景色代號。各顏色代碼如下:
0=黑色 1=藍色 2=綠色 3=湖藍色 4=紅色 5=紫色 6=黃色 7=白色 8=灰色 9=淡藍色 A=淡綠色 B=淡淺綠色 C=淡紅色 D=淡紫色 E=淡黃色 F=亮白色
外文名
system()
屬    性
函數

system()函數説明

system()會調用fork()產生子進程, 由子進程來調用/bin/sh-c string 來執行參數string 字符串所代表的命令, 此命令執行完後隨即返回原調用的進程. 在調用system()期間SIGCHLD 信號會被暫時擱置,SIGINT 和SIGQUIT 信號則會被忽略.

system()返回值

1、如果 system()在調用/bin/sh 時失敗則返回127, 其他失敗原因返回-1.。
2、若參數string 為空指針(NULL), 則返回非零值.
3、如果system()調用成功則最後會返回執行shell 命令後的返回值, 但是此返回值也有可能為system()調用/bin/sh 失敗所返回的127, 因此最好能再檢查errno 來確認執行成功.

system()附加説明

在編寫具有 SUID/SGID 權限的程序時請勿使用system(), system()會繼承環境變量, 通過環境變量可能會造成系統安全的問題.
例如:
以下是C語言的程序
 #include <stdio.h>
 #include <stdlib.h>
 int main(void)
 {
     system("ls -al /etc/passwd /etc/shadow");
     return 0;
 }

以下是C語言的運行結果
-rw-r--r-- 1 root root 705 Sep 3 13 :52 /etc/passwd
-r--------- 1 root root 572 Sep 2 15 :34 /etc/shadow
以下是C++的程序
 #include <iostream>
 #include <cstdlib>
 using namespace std;
 int main(void)
 {
     cout << "Hello world" << endl;
     system ("pause");
     system ("cls");
     return 0;
 }
參考資料