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