好记性不如铅笔头

C && C++, 编程

Linux使用execve执行shell脚本或者其他程序

先贴一个旧文,如果要获取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

 

发表评论

15 − 2 =

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据