1、system(執行shell 命令)
相關函式 fork,execve,waitpid,popen
表頭檔案 #include
定義函式 int system(const char * string);
函式說明 system()會呼叫fork()產生子程序,由子程序來呼叫/bin/sh-c
string來執行引數string字串所代表的命令,此命令執行完後隨
即返回原呼叫的程序。在呼叫system()期間sigchld 訊號會被暫時
擱置,sigint和sigquit 訊號則會被忽略。
返回值 如果system()在呼叫/bin/sh時失敗則返回127,其他失敗原因返回-
1。若引數string為空指標(null),則返回非零值。如果system()調
用成功則最後會返回執行shell命令後的返回值,但是此返回值也有
可能為system()呼叫/bin/sh失敗所返回的127,因此最好能再檢查
errno 來確認執行成功。
附加說明 在編寫具有suid/sgid許可權的程式時請勿使用system(),system()會
繼承環境變數,通過環境變數可能會造成系統安全的問題。
範例:
#include2、popen(建立管道i/o)<
stdlib.h
>
main()
相關函式 pipe,mkfifo,pclose,fork,system,fopen
表頭檔案 #include
定義函式 file * popen( const char * command,const char * type);
函式說明 popen()會呼叫fork()產生子程序,然後從子程序中呼叫/bin/sh -c
來執行引數command的指令。引數type可使用「r」代表讀取,「w」
代表寫入。依照此type值,popen()會建立管道連到子程序的標準輸
出裝置或標準輸入裝置,然後返回乙個檔案指標。隨後程序便可利
用此檔案指標來讀取子程序的輸出裝置或是寫入到子程序的標準輸
入裝置中。此外,所有使用檔案指標(file*)操作的函式也都可以使
用,除了fclose()以外。
返回值 若成功則返回檔案指標,否則返回null,錯誤原因存於errno中。
錯誤** einval引數type不合法。
注意事項 在編寫具suid/sgid許可權的程式時請盡量避免使用popen(),popen()
會繼承環境變數,通過環境變數可能會造成系統安全的問題。
範例: ?#include
main()
3、使用vfork()新建子程序,然後呼叫exec函式族
#include<
unistd.h
>
main();if
(vfork() ==
0)else
}
如何在C語言中呼叫shell命令
1 system 執行shell 命令 相關函式 fork,execve,waitpid,popen 表頭檔案 include 定義函式 int system const char string 函式說明 system 會呼叫fork 產生子程序,由子程序來呼叫 bin sh c string來執行...
如何在C語言中呼叫shell命令
1 system 執行shell 命令 相關函式 fork,execve,waitpid,popen 表頭檔案 include 定義函式 int system const char string 函式說明 system 會呼叫fork 產生子程序,由子程序來呼叫 bin sh c string來執行...
如何在C語言中呼叫SHELL命令
1 system 執行shell命令 相關函式 fork execve waitpid popen 表頭檔案 include 定義函式 int system const char string 函式說明 system 會呼叫fork 產生子程序,由子程序來呼叫 bin sh c string 來執行...