环境:Vmware Workstation;CentOS-6.4-x86_64
说明:
1、execve是Linux的系统函数,查询的时候使用man 2 execve
2、execve在头文件unistd.h中。
3、execve的定义形式:int execve(const char *filename, char *const argv[], char *const envp[]);
4、参数说明:
const char *filename:执行文件的完整路径。
char *const argv[]:传递给程序的完整参数列表,包括argv[0],它一般是程序的名。
char *const envp[]:一般传递NULL,表示可变参数的结尾。
下面的程序是通过execve函数,执行ls命令:
1、编写源文件main.c:
#include <stdio.h>
#include <unistd.h>
int main(int argc, char *args[])
{
// 定义一个字符数组,保存程序的参数信息
// 数组的第一个元素是程序的名称
char *buf[] = { "/bin/ls", "-l", NULL };
// 调用execve函数执行程序
// 第一个参数是程序的完整路径,第二个参数是字符数组,第三个参数是NULL
execve("/bin/ls", buf, NULL);
return 0;
}
2、编写makefile文件:
.SUFFIXES:.c .o
CC=gcc
SRCS=main.c
OBJS=$(SRCS:.c=.o)
EXEC=main
start: $(OBJS)
$(CC) -o $(EXEC) $(OBJS)
@echo "-----------------------------OK-----------------------"
.c.o:
$(CC) -Wall -o $@ -c $<
clean:
rm -rf $(EXEC) $(OBJS)
3、编译并执行程序:
[negivup@negivup mycode]$ make
gcc -Wall -o main.o -c main.c
gcc -o main main.o
-----------------------------OK-----------------------
[negivup@negivup mycode]$ main
total 20
-rwxrwxr-x. 1 negivup negivup 6514 Sep 21 09:43 main
-rw-rw-r--. 1 negivup negivup 332 Sep 21 09:41 main.c
-rw-rw-r--. 1 negivup negivup 1592 Sep 21 09:43 main.o
-rw-rw-r--. 1 negivup negivup 235 Sep 20 08:18 makefile
通过execve函数成功执行了命令:ls -l
PS:根据传智播客视频学习整理得出。