您的位置:首页 > 游戏 > 游戏 > 进程第五章:进程替换

进程第五章:进程替换

2024/12/23 15:09:58 来源:https://blog.csdn.net/qincjun/article/details/140142081  浏览:    关键词:进程第五章:进程替换

 一、铺垫

1.进程替换,替换的是代码段和数据段,其他的并没有太大的改变;

2.进程替换没有创建新的进程;

3.程序替换,子进程与父进程有高度的独立性,但是父进程仍可以通过接口获取子进程的信息;但是新程序必须有返回给父进程的返回值;

4.程序替换成功之后,exec*的后续代码不会被执行,替换失败之后,才会继续执行后续代码;exec*替换成功没有返回值,失败才会有返回值;

 二、函数细讲

1.execl函数

int execl(const char *path, const char *arg, ...);

 第一个参数:路径名,比如:"/usr/bin/ls",此路径名是为了确定该文件具体在哪里,是否存在,等问题;路径名中必须要包含要执行的文件名;用绝对路径或相对路径

第二个参数:要执行的文件名;要怎样执行;

第三个参数:可变参数列表,最后必须以NULL结尾

举例:        

execl("/usr/bin/ls","ls","-a","-l",NULL);

execl("/usr/bin/ls","ls"NULL);        //什么参数都不加

execl("./ls","ls"NULL);         //当前路径下的程序;(为了演示才这样写)

 2.execlp函数

p—path:execlp自己会在默认的path环境中查找;

int execlp(const char *file, const char *arg, ...);

execlp("ls","ls","-a","-l",NULL);        //举例

 3.execv函数

v—vector

int execv(const char *path, char *const argv[]);

不用可变参数,定义了指针数组,把参数传进指针数组里来用

举例:char *const myargv[]={"ls","-a",NULL};

execv("/usr/bin/ls", myargv[]);

 4.execvp函数

int execvp(const char *file, char *const argv[]);

在默认的path环境中寻找文件去执行;

5.execle函数

int execle(const char *path, const char *arg, ...,char *const envp[]);

//最后一个参数,变成环境变量的参数;

char *const myenv[]={"myenv=1111111"} //把环境变量传进去

//采用的策略是覆盖,而不是增加,父进程的环境变量被覆盖;

 通过环境变量把变量传给子进程,来供子进程使用;

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com