ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

exec函数族

2022-07-30 13:31:12  阅读:119  来源: 互联网

标签:const 函数 exec char execlp 环境变量


一、exec函数族

fork创建子进程后,执行的是和父进程相同的程序(但有可能执行不同的代码分支),子进程往往要调用exec函数以执行另一个程序。

exec函数族:

    使进程执行某一程序。成功无返回值,失败返回 -1

其中,重点是execl函数和execlp函数

int execlp(const char *file, const char *arg, ...);     借助 PATH 环境变量找寻待执行程序

       参1: 程序名

       参2: argv0

       参3: argv1

       ...: argvN

       哨兵:NULL

int execl(const char *path, const char *arg, ...);      自己指定待执行程序路径。

区别,execlp不用指定路径名,直接可执行程序名即可,因为环境变量path已经保存了路径名

 

 

int execlp(const char *file, const char *arg, …)

 

成功,无返回,失败返回-1

 

参数1:要加载的程序名字,该函数需要配合PATH环境变量来使用,当PATH所有目录搜素后没有参数1则返回出错。

 

该函数通常用来调用系统程序。如ls、date、cp、cat命令。

 

execlp这里面的p,表示要借助环境变量来加载可执行文件

注意:第一个参数是argv0,需要把程序名再写一遍,以及后面的参数都需要加上双引号,最后加上NULL

 

 

下面使用execl来让子程序调用自定义的程序。

int execl(const char *path, const char *arg, …)

这里要注意,和execlp不同的是,第一个参数是路径,不是文件名。

这个路径用相对路径和绝对路径都行。

调用的代码如下:

 

 

 

 

exec函数族一般规律:

 

exec函数一旦调用成功,即执行新的程序,不返回。只有失败才返回,错误值-1,所以通常我们直接在exec函数调用后直接调用perror(),和exit(),无需if判断。

 

l(list)               命令行参数列表

 

p(path)              搜索file时使用path变量

 

v(vector)            使用命令行参数数组

 

e(environment)       使用环境变量数组,不适用进程原有的环境变量,设置新加载程序运行的环境变量

 

事实上,只有execve是真正的系统调用,其他5个函数最终都调用execve,是库函数,所以execve在man手册第二节,其它函数在man手册第3节。

标签:const,函数,exec,char,execlp,环境变量
来源: https://www.cnblogs.com/chenya-coding/p/16534766.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有