在
c語言中執行shell
命令1、
system
系統呼叫
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()會繼承環境變數,通過環境變數可能會造成系統安全的問題。
use the exec(3) family of functions instead, but not execlp(3) or execvp(3).
#include
int main()2)
popen(建立管道i/o
)file *popen(const char *command, const char *type);
int pclose(file *stream);
popen()
會呼叫fork()產生子程序,然後從子程序中呼叫/bin/sh
-c command
來執行引數
command的指令。依照此type(r,w)值,popen()
會建立管道連到子程序的標準輸出裝置或標準輸入裝置,然後返回乙個檔案指標。隨後程序便可利用此檔案指標來讀取子程序的輸出裝置或是寫入到子程序的標準輸入裝置中。此外,所有使用檔案指標(file*)
操作的函式也都可以使用,除了
fclose()
以外。since a pipe is by definition unidirectional, the type argument may specify only reading or writing, not both; the resulting stream is correspondingly read-only or write-only.
返回值,若成功則返回檔案指標,否則返回
null,錯誤原因存於errno
中。在編寫具
suid/sgid許可權的程式時請盡量避免使用popen(),popen()
會繼承環境變數,通過環境變數可能會造成系統安全的問題。
#include
int main()
3)使用
vfork()新建子程序,然後呼叫exec
函式族#include "unistd.h"
#include "stdio.h"
int main()
;if(vfork() == 0)
else
return 0;}原文
[1]
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來執行...