进程程序替换------>exec 函数家族

    调用exec并不创建新进程,只是用磁盘上的新程序替换了当前进程的正文段,数据段,堆段,栈段。

1.int execl(const char* pathname,const char* arg,....../* (char*)0 */);

int main()
{
	pid_t id=fork();
    if(id==0)
	{
		execl("/bin/ls","ls","-a","-l",NULL);
	}
	else
	{
		waitpid(id,NULL,0);
	}
	return 0;
}
第一个参数是要替换的新的程序,是取绝对路径名,第二个参数是表示怎么执行,将命令行上的参数说明为一个单独的参数,并要以空指针结尾。

2.int execv(const char* pathname,char* const argv[]);

int main()
{
	pid_t id=fork();
	if(id==0)
	{
		char* argv[]={"ls","-a","-l",NULL};
		execv("/bin/ls",argv);
	}
	else
	{
		waitpid(id,NULL,0);
	}
	return 0;
}
先构造一个指向各个参数的指针数组,然后将该数组地址作为第二个参数。

3.int execle(const char* pathname,const char* arg,....../* (char*)0 */,

   char* const envp[]);

int main()
{
	pid_t id=fork();
	if(id==0)
	{
		char* const envp[]={"MYPATH=/A/B",NULL};
		execle("/home/wwr/code/exec/myexec","./myexec",NULL,envp);
	}
	else
	{
		waitpid(id,NULL,0);
	}
	return 0;
}

4.int execve(const char* pathname,char* const argv[], char* const envp[]);

这个是系统调用函数,其他6个函数都是在这个函数的基础上完成的。

5.int execlp(const char* filename,const char* arg,....../* (char*)0 */);

6.int execvp(const char* filename,char* const argv[]);

如果filename中包含/,则就将视为路径名,否则就按环境变量,在它所指定的目录中搜寻可执行文件。
7.int fexecve(int fd,char* const argv[], char* const envp[]);

第一个参数是文件描述符。


7个函数的返回值:成功,不返回,错误,返回-1.

总结:


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值