C語言呼叫shell命令方法

2021-07-10 01:10:03 字數 1504 閱讀 7149

在c語言中執行shell命令的方法:

1. system(shell_string);

該方法無法返回shell命令的輸出結果,只能返回返回值。

2. popen/fgets/fputs/pclose

該方法可以讀取shell命令的輸出結果和返回值,也可以向shell命令輸入引數。

#include file * popen ( const char * command , const char * type );

int pclose ( file * stream );

說明:

popen() 函式通過建立乙個管道,呼叫 fork 產生乙個子程序,執行乙個 shell 以

執行命令來開啟乙個程序。這個程序必須由 pclose() 函式關閉,而不是 fclose() 函式。pclose() 函式關閉標準 i/o 流,等待命令執行結束,然後返回 shell 的終止狀態。如果 shell 不能被執行,則 pclose() 返回的終止狀態與 shell 已執行 exit 一樣。

type 引數只能是讀或者寫中的一種,得到的返回值(標準 i/o 流)也具有和 type 相應的唯讀或只寫型別。如果 type 是 "r" 則檔案指標連線到 command 的標準輸出;如果 type 是 "w" 則檔案指標連線到 command 的標準輸入。

command 引數是乙個指向以 null 結束的 shell 命令字串的

指標。這行命令將被傳到 bin/sh 並使用-c 標誌,shell 將執行這個命令。

popen 的返回值是個標準 i/o 流,必須由 

pclose 來終止。前面提到這個流是單向的。所以向這個流寫內容相當於寫入該命令的標準輸入;命令的標準輸出和呼叫 

popen 的程序相同。與之相反的,從流中讀資料相當於讀取命令的標準輸出;命令的標準輸入和呼叫 

popen 的程序相同。

返回值:

如果呼叫 fork() 或 pipe() 失敗,或者不能分配記憶體將返回null,否則返回標準 i/o 流。

popen 沒有為

記憶體分配失敗設定 errno 值。

如果呼叫 fork() 或 pipe() 時出現錯誤,errno 被設為相應的錯誤型別。

如果 type 引數不合法,errno將返回einval。

使用範例:

popen.c 

#include void main()

//test write to shell

fd = popen("./popen_sh.sh", "w");

if(fd)

}

popen_sh.sh 

#!/bin/sh

echo "please enter string:"

read input_string

echo "input_string=$input_string"

exit 12

C語言呼叫shell命令

在linux程式開發中經常需要呼叫一些現有的shell介面,比如ifconfig ping等。通過以下程式就可以直接呼叫,雖然和 實現相比效率較低,但是 編寫較為簡單。c 函式功能 popen 會呼叫fork 產生子程序,然後從子程序中呼叫 bin sh c來執行引數command的指令。引數typ...

python 呼叫 shell 命令方法

python呼叫shell命令方法 缺點 不能獲取返回值 要得到命令的輸出內容,只需再呼叫下read 或readlines 等 例 a os.popen cmd read 此模組主要有如下方法 commands.getstatusoutput cmd 返回 status,output command...

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

1 system 執行shell 命令 相關函式 fork,execve,waitpid,popen 表頭檔案 include 定義函式 int system const char string 函式說明 system 會呼叫fork 產生子程序,由子程序來呼叫 bin sh c string來執行...