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

linux环境 c 中如何执行shell命令,古老的榕树,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。