linux环境c中如何执⾏shell命令
1
system 相当简单:
int system(const char *command);
system("ps -aux");
2 popen
popen有两个参数,第⼀个是命令,2是打开流的⽅式;返回⼀个⽂件流——popen:让进程看起来像⽂件 
区别:
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
linux命令及shell编写
./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);

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。