exec函数族

exec并不是一个函数,它是一个函数族,用一个新的进程映像替代当前进程映像,指的是一组函数,包括了六个函数,下面就来说说家族里的兄弟姐妹:

1、execl()

   既然是一个家族里的一员,名字的称呼有着相同性的同时,也有着区别,execl后缀的"l"就代表着"list"的含义,即参数列表。

   头文件:#include <unistd.h>

   原型:int execl(const *path,const char *arg,...)

   功能:执行文件

   描述:用于执行参数path字符串所代表的文件路径,接着的参数代表执行文件时传递过去的argv[0]、argv[1]等等,但是要注意必须最后一个参数由空指针结束。

   返回值:成功,不会有返回值,执行失败返回-1,并将失败原因存放在errno中。

   示例:

#include <unistd.h>

int main()
{
    execl("/bin/ls","ls","-al","/root/Linux/1016",(char *) 0);
    return 0;
}

调试结果:

总计 92
drwxr-xr-x 2 root root 4096 10-16 22:18 .
drwxr-xr-x 6 root root 4096 10-17 14:50 ..
-rwxr-xr-x 1 root root 6104 10-16 14:02 copy
-rw-r--r-- 1 root root 1057 10-16 15:00 copy.c
-rwxr-xr-x 1 root root 5179 10-16 22:18 count
-rw-r--r-- 1 root root  485 10-16 22:18 count.c
-rwxr-xr-x 1 root root 5408 10-16 10:55 exchange
-rw-r--r-- 1 root root  610 10-16 10:55 exchange.c
-rwxr-xr-x 1 root root 4777 10-16 16:23 exec
-rw-r--r-- 1 root root  113 10-16 16:23 exec.c
-rw-r--r-- 1 root root   13 10-16 11:40 ex.txt
-rwxr-xr-x 1 root root 5228 10-16 22:07 fork
-rw-r--r-- 1 root root  368 10-16 22:07 fork.c
-rw-r--r-- 1 root root  144 10-16 10:55 hello.txt
-rw-r--r-- 1 root root   14 10-16 11:43 msg.txt
-rwxr-xr-x 1 root root 5477 10-16 17:14 wait
-rw-r--r-- 1 root root  493 10-16 17:14 wait.c


2、execlp()

    头文件:#include <unistd.h>

原型:int execlp(const char *file,const *argv...)

功能:从PATH环境变量中查找文件并执行

描述:用于从PATH环境变量所指向的目录中查找符合参数file的文件名,找到后便执行文件,然后将第二个以后的参数当做该文件的argv[0]、argv[1]...,最后一个参数必须用空指针作为结束。

返回值:成功,则不会返回;如果执行失败则直接返回-1,并将失败原因保存在errno中。

   

   示例:

#include <unistd.h>

main()
{
   execlp("ls","ls","-al","/root/Linux/1016",NULL); 
}

调试结果:

总计 104
drwxr-xr-x 2 root root 4096 10-19 13:51 .
drwxr-xr-x 6 root root 4096 10-17 14:50 ..
-rwxr-xr-x 1 root root 6104 10-16 14:02 copy
-rw-r--r-- 1 root root 1057 10-16 15:00 copy.c
-rwxr-xr-x 1 root root 5179 10-16 22:18 count
-rw-r--r-- 1 root root  485 10-16 22:18 count.c
-rwxr-xr-x 1 root root 5408 10-16 10:55 exchange
-rw-r--r-- 1 root root  610 10-16 10:55 exchange.c
-rwxr-xr-x 1 root root 4777 10-16 16:23 exec
-rw-r--r-- 1 root root  113 10-16 16:23 exec.c
-rwxr-xr-x 1 root root 4772 10-19 13:51 execlp
-rw-r--r-- 1 root root   85 10-19 13:51 execlp.c
-rw-r--r-- 1 root root   13 10-16 11:40 ex.txt
-rwxr-xr-x 1 root root 5228 10-16 22:07 fork
-rw-r--r-- 1 root root  368 10-16 22:07 fork.c
-rw-r--r-- 1 root root  144 10-16 10:55 hello.txt
-rw-r--r-- 1 root root   14 10-16 11:43 msg.txt
-rwxr-xr-x 1 root root 5477 10-16 17:14 wait
-rw-r--r-- 1 root root  493 10-16 17:14 wait.c


3、execle

   头文件:#include <unistd.h>

   原型:int execle(const char *path,const char *argv,...,char char *const envp[])

   功能:将环境变量传递给新的进程

   描述:用来执行参数path字符串所代表的文件路径,并为新程序复制最后一个参数所指示的环境变量,接下来的参数代表执行该文件时传递过去的argv[0]、argv[1]...,最后一个参数必须使用空指针结束。

   返回值:执行成功则不会返回;执行失败则直接返回-1,并将失败原因存放在errno中


4、execv

   头文件:#include <unistd.h>

   原型:int execv(const char *pathname,char *const argv[])

   功能:装入并运行其他程序

   描述:会停止执行当前的程序,并且以pathname字符串所值的应用程序来替代被停止执行的进程,而且进程ID不会改变,pathname是被执行的应用程序,argv传递给应用程序的参数列表,参数列表的第一个参数应该是应该是应用程序名字本身,并且最后一个参数应该为NULL

   返回值:成功,不会返回;失败时返回-1,错误原因保存在errno中,也可以通过stderr得到具体的错误描述字符串


5、execvp

   头文件:#include <unistd.h>

   原型:int execvp(const char *file,char *const argv[])

   功能:调用另一个程序

   描述:从PATH环境变量所指的目录中查找符合参数File的文件名,找到后便执行该文件,然后将第二个参数argv传递给该欲执行的文件。

   返回值:成功则不会返回,执行失败则直接返回-1,失败原因并保存在errno中


6、execve

   头文件:#include <unistd.h>

   原型:int execve(const char *filename,char *const argv[],char *const envp[])

   功能:执行文件

   描述:执行参数filename字符串所代表的文件路径,第二个参数利用数组指针来传递给执行文件,最后一个参数则为传递给执行文件的新环境变量数组

   返回值:成功则不会返回,执行失败则返回-1,并将失败的原因保存在errno中


   

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值