Linux中不同版本exec函数区分
该问题为OSTEP
第五章进程API
上的一个问题,在搜Stack overflow
的时候发现一个很好记的答案,单独写一个博客记录一下
参考回答
翻译摘抄
对于exec()
函数,在C/C++中有以下几个不同的版本
1 |
|
其中不同版本的区别通过函数名可以分为以下几个大类:
L和V
L:L在这里指的是
list
,执行的时候的将参数以类似如下方式传入:1
execl(const char *pathname, const char *arg, ...)
其中省略号代表了后续分别独立传入的参数,其中,第一个参数应是正在执行的文件关联的文件名,并且参数以
空字符NULL
作为结尾的判定。V: V在这里指的是
vector
,执行的时候以char*
的形式传入执行指令1
int execv(const char *pathname, char *const argv[]);
对于不确定传入参数的个数的时候,可以使用
vector
来执行程序。使用带v
的函数的时候,首先传入的第一个pathname
是指向可执行文件的路径,后面传入的argv[]
中,第一个argv
的位置上按习惯为可执行文件的名字,后面argv+1
等参数则是实际需要调用的可执行文件的参数、
有的命令执行的时候,我们并不知道要传入的参数有几个,而有的命令则必须要一定数量的参数才能运行。通过分别调用带l
或带v
的函数,在不同的情况下执行某些特定命令很有用
E
E在这里指代的是Environment
,在结尾带e
的exec()
调用的时候的环境变量env
与父进程的env
并非一定相同,通过带e
的函数即可在调用exec()
的同时传入一个env
供子进程使用
P
P在这里指的是系统环境变量中的PATH
,含有p
的exec()
在调用的时候会在系统变量的PATH
当中寻找对应的可执行文件,而缺少p
的exec()
在执行的时候,如果在当前目录下没有对应的文件名字,则需要传入目标可执行文件的绝对或相对路径。
Linux中不同版本exec函数区分
https://halc.top/p/b9e46cb4