linux系统编程-exec函数族介绍

1.exec函数族提供了一种在进程中启动另一个程序执行的方法。它可以根据指定的文件名或目录名找到可执行文件,并用它来取代原调用进程的数据段、代码段和堆栈段。这样exrc之后的代码段则不会再继续执行。在执行完之后,原调用进程的内容除了进程号外,其他全部都被替换了。

2.如果还想继续执行exec之后的代码段功能,则我们就可以新建一个新的进程,让这个新的子进程,执行exec之后的代码段。

1.这些函数都属于exec函数族,后缀不同则参数不同

#include <unistd.h>
int execl(const char *path, const char *arg, ...);
int execv(const char *path, char *const argv[]);
int execle(const char *path, const char *arg, ..., char *const envp[]);
int execve(const char *path, char *const argv[], char *const envp[]);
int execlp(const char *file, const char *arg, ...);
int execvp(const char *file, char *const argv[]);	
l: list 列写出执行某个文件所需要的所有参数,并且以NULL结尾
		例:
			执行/home/mylinux/Documents/eeee
			执行命令 eeee
			execl("/home/mylinux/Documents/eeee", "eeee", NULL);
		例: 
			ls -l /home/mylinux/ --》在/bin下
			execl("/bin/ls", "ls", "-l", "/home/mylinux/", NULL);
		v: vector(向量) 将执行文件所需要的在一个数组中进行传参。
		例: 
			ls -l /home/mylinux/ --》在/bin下
			char * argv[] = {"ls",  "-l",  "/home/mylinux/", NULL};
			execv("/bin/ls", argv);
		p : path(路径) 将会使用环境变量所保存的$PATH来查找指定的文件
		例: 
			ls -l /home/mylinux/ 
			execlp("ls", "ls", "-l", "/home/mylinux/", NULL);
			execvp("ls", argv);	
一般会应用到第三方软件

如:
			int main()
			{
				.....				
				if (0 == fork())
				{
					exec() ;
				}				
				.....				
				....
				return 0;
			}

例程

#include <unistd.h>
#include<stdio.h> 
#include<string.h>
#include<stdlib.h>
#include <unistd.h>

int main()
{
	if(execl("/mnt/mylinux/testexec","testexec","execl",NULL) == -1){
		perror("execl error");
		exit(1);
	}
	//程序已经跳转走,如果正常execl不反回错误,下面的代码不会执行!
	printf("execl error!\n");
	
	//execl("/bin/ls", "ls", "/home/mylinux/Documents", NULL);
	//execl("/bin/cat", "cat", "eixt.c", NULL );
	//execl("./exit", "./exit", NULL);
	
	//char * argv[] = {"ls", "/home/mylinux/Documents", NULL};
	//execv("/bin/ls", argv);
	
	//execlp("ls", "ls", "/home/mylinux/Documents", NULL);
	
	//char * argv[] = {"ls", "/home/mylinux/Documents", NULL};
	//execvp("ls", argv);	
	
	return 0;
}

猜你喜欢

转载自blog.csdn.net/yuupengsun/article/details/106416028
今日推荐