linux環境 c 中如何執行shell命令


1

system 相當簡單:

int system(const char *command);

 system("ps -aux");

 

2 popen

popen有兩個參數,第一個是命令,2是打開流的方式; 返回一個文件流——popen:讓進程看起來像文件  http://www.cnblogs.com/RichardLee/articles/2371765.html

 

 

區別:

linux下通過C執行命令的時候一半都是使用system()方法,但是該方法執行命令返回的值是-1或0,而有時候我們需要得到執行命令后的結果。可以使用管道實現

輸出到文件流的函數是popen()

 

 

 

3 exerse  可以在一個進程插入另外一個進程執行,但是又不像fork()一樣產生一個子進程,execve()插入的進程和原進程共享進程號,就好像執行這進程就像執行過程調用一般隨意

int execve(const char *filename, char *const argv[], char *const envp[]);    1 要執行的文件名   2 參數    3 環境變量

execve 這種方式有些特別,必須傳人一個shell腳本文件(這個文件第一行必須是#!/bin/bash)。。

char *newargv[] = { "/opt/software/lktest/c" };
char *newenviron[] = { NULL };
execve("/bin/ls" , newargv, newenviron);      --- 如果是系統命令,需要其完整路徑、不然沒有輸出———— 也不報錯!

 

./execve.o ./execve_sscrs.sh
./execve.o execve_sscrs.sh

兩種方式都是可行的。

4
execl  跟exerse類似
extern int execl(_const char *_path,const char *_argv[],...,NULL)
簡單解釋:函數execl()返回值定義為整形,如果執行成功將不返回!執行失敗返回-1。
                  參數列表中char *_path為所要執行的文件的絕對路徑,從第二個參數argv開始為執行新的文件所需的參數,最后一個參數必須是控指針(我為了簡便用NULL代替)。

此時最好引入#include <unistd.h>, 否則有警告。
 execl("/usr/bin/sh", "sh", "-c","ls ~", 0);


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM