如何在C語言中呼叫shell命令

2021-06-07 22:01:44 字數 1627 閱讀 7430

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

<

stdlib.h

>

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

<

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 來執行...