exec族

来源:互联网 发布:windows应用商店在哪 编辑:程序博客网 时间:2024/04/29 08:56

启动进程:exec族

共用头文件:#include

<code class="hljs cs has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span> execl(<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">const</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">char</span> *path,<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">const</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">char</span> *arg, ...);<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span> execlp(<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">const</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">char</span> *file, <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">const</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">char</span> *arg, ...);<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span> execle(<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">const</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">char</span> *path,<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">const</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">char</span> *arg, ..., <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">char</span> * <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">const</span> envp[]);<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span> execv(<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">const</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">char</span> *path,<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">char</span> *<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">const</span> argv[]);<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span> execvp(<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">const</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">char</span> *file, <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">char</span> *<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">const</span> argv[]);<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span> execve(<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">const</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">char</span> *file,<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">char</span> *<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">const</span> argv[],<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">char</span> *<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">const</span> envp[]);</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; opacity: 0.0532451; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li></ul><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li></ul>

1.execl 
函数定义: 
int execl(const char *path,const char *arg, ...); 
返回值

函数执行成功时没有返回值,执行失败时的返回值为-1.

函数说明 execl()用来执行参数path字符串所代表的文件路径,第二个参数是利用数组指针来传递给执行文件,最后一个参数需要以空指针(NULL)结束。 
2.execlp 
函数定义 
int execlp(const char *file, const char *arg, ...); 
返回值

函数执行成功时没有返回值,执行失败时的返回值为-1.

函数说明 execl()用来执行参数path字符串所代表的目录中找到符合参数file的文件名,找到后便执行该文件,第二个参数是利用数组指针来传递给执行文件,最后一个参数需要以空指针(NULL)结束。 
3.execle 
函数定义 
int execle(const char *path,const char *arg, ..., char * const envp[]); 
返回值

函数执行成功时没有返回值,执行失败时的返回值为-1.

函数说明 execl是用来执行参数path字符串所代表的文件路径,并为新程序复制最后一个参数所指示的环境变量。接下来的参数代表执行该文件时传递过去的argv(0)、argv[1]……,最后一个参数必须用空指针(NULL)作结束。 
4.execv 
函数定义 
int execv(const char *path,char *const argv[]); 
返回值

函数执行成功时没有返回值,执行失败时的返回值为-1.

函数说明 execv()用来执行参数filename字符串所代表的文件路径,第二个参数是利用数组指针来传递给执行文件,最后一个参数则为传递给执行文件的新环境变量数组。 
5.execvp 
函数定义 
int execvp(const char *file, char *const argv[]); 
返回值

函数执行成功时没有返回值,执行失败时的返回值为-1.

函数说明 execvp()用来执行参数path字符串所代表的目录中找到符合参数file的文件名,找到后便执行该文件,第二个参数是利用数组指针来传递给执行文件。 
6.execve 
函数定义 
int execve(const char *filename, char *const argv[ ], char *const envp[ ]); 
返回值

函数执行成功时没有返回值,执行失败时的返回值为-1.

函数说明 execve()用来执行参数filename字符串所代表的文件路径,第二个参数是利用数组指针来传递给执行文件,并且需要以空指针(NULL)结束,最后一个参数则为传递给执行文件的新环境变量数组。

综合而言:

exec函数族装入并运行程序pathname,并将参数arg0(arg1,arg2,argv[],envp[])传递给子程序,出错返回-1。在exec函数族中,后缀l、v、p、e添加到exec后,所指定的函数将具有某种操作能力有后缀: 
后缀 操作能力

l 希望接收以逗号分隔的参数列表,列表以NULL指针作为结束标志,参数传递为逐个列举方式:execl execle execlp 
v 希望接收到一个以NULL结尾的字符串数组的指针,参数传递为构造指针数组方式:execv execve execvp 
p 是一个以NULL结尾的字符串数组指针,函数可以DOS的PATH变量查找子程序文件,可执行文件查找方式为文件名:execlp execvp 
e 函数传递指定参数envp,允许改变子进程的环境,无后缀e时,子进程使用当前程序的环境,可传递新进程环境变量: execle execve

0 0