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

2021-09-01 19:14:41 字數 2511 閱讀 4079

1system(執行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()

2popen(建立管道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來執行...