exec函数族
发布日期:2021-07-01 04:29:06 浏览次数:2 分类:技术文章

本文共 3147 字,大约阅读时间需要 10 分钟。

文章目录

1 exec函数族

1.1 函数介绍

常用后缀:

  • l:代表以列表形式传参(list)
  • v:代表以矢量数组形式传参(vector)
  • p:代表使用环境变量Path来寻找指定执行文件
  • e:代表用户提供自定义的环境变量

头文件:

#include 

函数原型:

int execl(const char *path, const char *arg, ...);int execlp(const char *file, const char *arg, ...);int execle(const char *path, const char *arg, ..., char *const envp[]);int execv(const char *path, char *const argv[]);int execvp(const char *file, char *const argv[]);int execve(const char *path, char *const argv[], char *const envp[]);

返回值:

  • 成功:不返回
  • 失败:-1

1.2 函数测试

函数execl:

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

execl()函数用于执行参数path字符串所代表的文件路径(必须指定路径),接下来是一系列可变参数,它们代表执行该文件时传递过去的 argv[0]、argv[1]… argv[n] ,最后一个参数必须用空指针NULL作为结束的标志。

int main(void){
int err; printf("this is a execl function test demo!\n\n"); err = execl("/bin/ls", "ls", "-la", NULL); if (err < 0) {
printf("execl fail!\n\n"); } printf("Done!\n\n");}

函数execlp:

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

execlp()函数会从PATH环境变量所指的目录中查找符合参数file的文件名(不需要指定路径),找到后便执行该文件,然后将第二个以后的参数当做该文件的 argv[0]、argv[1]… argv[n] , 最后一个参数必须用空指针NULL作为结束的标志。

int main(void){
int err; printf("this is a execlp function test demo!\n\n"); err = execlp("ls", "ls", "-la", NULL); if (err < 0) {
printf("execlp fail!\n\n"); }}

函数execle:

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

execle()函数用于执行参数path字符串所代表的文件路径(必须指定路径),并为新程序复制最后一个参数所指示的环境变量(envp)。

int main(void){
int err; char *envp[] = {
"/bin", NULL }; printf("this is a execle function test demo!\n\n"); err = execle("/bin/ls", "ls", "-la", NULL, envp); if (err < 0) {
printf("execle fail!\n\n"); }}

函数execv:

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

execv()函数用于执行参数path字符串所代表的文件路径(必须指定路径),接着传入一个数组作为执行该文件时传递过去的参数 argv[0]、argv[1]… argv[n] ,以空指针NULL结束。

int main(void){
int err; char *argv[] = {
"ls", "-la", NULL }; printf("this is a execv function test demo!\n\n"); err = execv("/bin/ls", argv); if (err < 0) {
printf("execv fail!\n\n"); }}

函数execvp:

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

execvp()函数会从PATH环境变量所指的目录中查找符合参数file的文件名(不需要指定路径),找到该文件后便执行该文件,接着传入一个数组作为执行该文件时传递过去的参数 argv[0]、argv[1] … argv[n] ,以空指针NULL结束。

int main(void){
int err; char *argv[] = {
"ls", "-la", NULL }; printf("this is a execvp function test demo!\n\n"); err = execvp("ls", argv); if (err < 0) {
printf("execvp fail!\n\n"); }}

函数execve:

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

execve()函数用于执行参数path字符串所代表的文件路径(必须指定路径),执行该文件时会传入一个数组作为执行该文件时传递过去的参数 argv[0]、argv[1] … argv[n] ,除此之外该函数还会为新程序复制最后一个参数所指示的环境变量(envp)。

int main(void){
int err; char *argv[] = {
"ls", "-la", NULL }; char *envp[] = {
"/bin", NULL }; printf("this is a execve function test demo!\n\n"); err = execve("/bin/ls", argv, envp); if (err < 0) {
printf("execve fail!\n\n"); }}

1.3 要点总结

要点:

  • l后缀和v后缀必须两者选其一来使用
  • p后缀和e后缀是可选的,可用可不用
  • 组合后缀的相关函数还有很多,可自己进一步了解

exce函数有可能执行失败,需要预防:

  • 新程序的文件路径出错
  • 传参或者是自定义环境变量时,没有加NULL
  • 新程序没有执行权限

参考资料:

转载地址:https://muzimin.blog.csdn.net/article/details/107730473 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:进程的退出
下一篇:fork函数介绍

发表评论

最新留言

关注你微信了!
[***.104.42.241]2024年05月04日 20时29分07秒