先贴一个旧文,如果要获取shell执行的结果,可以使用popen来打开一个管道,参考【 http://116.62.110.235/blog/linux-popen/ 】。
另一种执行的方式是使用execve函数,这里笔记一份最简单代码。
CONTENTS
代码方式执行脚本
/* 代码方式执行ShowArgs.sh */ char *pArgs[] = { "./ShowArgs.sh",/* 第一个参数必须是shell名称 */ "1", /* 入参从数组第二个开始 */ "hello", "world" NULL }; char *pEnv[] = { NULL }; execve(pArgs[0], pArgs, pEnv); perror(pArgs[0]);
ShowArgs.sh文件如下:
#! /bin/bash echo $0 echo $1 echo $2 echo $3
代码执行结果如下:
./ShowArgs.sh 1 hello world
代码方式执行程序
先写一个简单点的程序 ShowArgs.c:
#include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { int j; for (j = 0; j < argc; j++) printf("argv[%d]: %s\n", j, argv[j]); return 0; }
编译出程序ShowArgs备用。
/* 代码方式执行ShowArgs */ char *pArgs[] = { "./ShowArgs",/* 第一个参数必须是可执行程序名称 */ "1", /* 入参从数组第二个开始 */ "hello", "world" NULL }; char *pEnv[] = { NULL }; execve(pArgs[0], pArgs, pEnv); perror(pArgs[0]);
那么执行结果控制台如下:
argv[0]: ./ShowArgs argv[1]: 1 argv[2]: hello argv[3]: world
发表评论