C 呼叫shell指令碼的兩種方式

2021-10-24 01:15:36 字數 1377 閱讀 8599

#include int system(const char *str)
編寫指令碼test.sh:

#!/bin/sh

echo $home

編寫**:

#include #include #include int main()

特點:

1.兩種錯誤返回值:

-1 system()進行fork子程序失敗;

127 執行指令碼或shell命令失敗

2.無法在程式中直接獲取到shell命令的返回內容

標準i/o函式庫提供了popen函式,它啟動另外乙個程序去執行乙個shell命令列。

這裡我們稱呼叫popen的程序為父程序,由popen啟動的程序稱為子程序。

popen函式還建立乙個管道用於父子程序間通訊。父程序要麼從管道讀資訊,要麼向管道寫資訊,至於是讀還是寫取決於父程序呼叫popen時傳遞的引數。下在給出popen、pclose的定義:

01	#include 02	/*

03 函式功能:popen()會呼叫fork()產生子程序,然後從子程序中呼叫/bin/sh -c來執行引數command的指令。

04 引數type可使用「r」代表讀取,「w」代表寫入。

05 依照此type值,popen()會建立管道連到子程序的標準輸出裝置或標準輸入裝置,然後返回乙個檔案指標。

06 隨後程序便可利用此檔案指標來讀取子程序的輸出裝置或是寫入到子程序的標準輸入裝置中

07 返回值:若成功則返回檔案指標,否則返回null,錯誤原因存於errno中

08 */

09 file * popen( const char * command,const char * type);

10

11 /*

12 函式功能:pclose()用來關閉由popen所建立的管道及檔案指標。引數stream為先前由popen()所返回的檔案指標

13 返回值:若成功返回shell的終止狀態(也即子程序的終止狀態),若出錯返回-1,錯誤原因存於errno中

14 */

15 int pclose(file * stream);

編寫**:

#include //popen()

#include //memset()

int main()

特點:

1. 用 建立管道 的 方式 啟動 乙個 程序, 並呼叫 shell

2. 可在程式內部獲取shell執行後的返回內容

shell 指令碼 兩種登入方式

bin bash echo while 方法!echo 請輸入登入使用者名稱 read name1 if test name1 yang then echo 登入成功 else echo 登入失敗,請輸入正確的使用者名稱 read name1 while name1 yang do echo 登入失...

python指令碼的兩種呼叫方式

一般的linux都自帶python,不用安裝,window的話安裝程式安裝就可以了。執行python有兩種方式 解析器執行和原始檔執行。1.解析器執行 在命令列輸入python就能啟動解析器,我們安裝下面的方式輸入就馬上能得到列印資訊 退出可以輸入exit 或者quit 或者ctrl d。2.使用原...

C 呼叫 C dll的兩種方式

第一種,非託管方式 呼叫類和方法 非託管方式,只能呼叫函式,並且函式在extern c 的體裡面 有一下幾種方式,把函式都寫了,把介面寫了。建立物件的方法 extern c exampleunmanageddll api cunmanagedtestclass createtestclass 釋放 ...