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);
