exec()函数

分类:

字符串数组参数:

execv()

execvp()

execve()

可变参数(printf()为典型的可变参数):

execl()

execlp()

execle()

其中:

字符 含义
v 第二个参数是数组
l 第二个参数之后是变参
p 第一个参数是文件名(否则要传路径)
e 最后一个参数是环境变量

PS:传变参时,最后一个参数填0表示变参结束,变参即无限制个数传入参数

原型:

#include <unistd.h>  
char **environ;  
int execl (const char *path, const char *arg0, ..., (char*)0);  
int execlp(const char *file, const char *arg0, ..., (char*)0);  
int execle(const char *path, const char *arg0, ..., (char*)0, char *const envp[]);  
int execv (const char *path, char *const argv[]);  
int execvp(cosnt char *file, char *const argv[]);  
int execve(const char *path, char *const argv[], char *const envp[]);

返回值:

-1 失败
不返回 成功

本质:

覆盖程序。

特点:

1.一次调用,失败返回。
2.取代原有程序:
PID不变,地址空间中的所有内容(数据空间,代码,堆栈)变成所调用的函数代码。

代码:

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

extern char ** environ;

int main(int argc,char** argv){
	

	printf("%s,PID %d\n",argv[0],getpid());
	//execl("/bin/ps","ps","-a","-o","pid,ppid,cmd",0);
	//execlp("ps","ps","-a","-o","pid,ppid,cmd",0);
	//execle("/bin/ps","ps","-a","-o","pid,ppid,cmd",0,environ);
	char* args[] = {"ps","-a","-o","pid,ppid,cmd",0};
	//execv("/bin/ps",args);
	execve("/bin/ps",args,environ);
	//execvp("ps",args);
	printf("%s,PID %d\n",argv[0],getpid());
	//execlp()
	//execle()
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值