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()
會繼承環境變數,通過環境變數可能會造成系統安全的問題。
範例:
#include
main()
2、popen(建立管道i/o)
相關函式: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()
執行root :x:0 0: root: /root: /bin/bash
3、使用vfork()新建子程序,然後呼叫exec函式族
#include
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來執行...