1、exec族函数的作用

exec函数族提供了一个在进程中启动另一个程序执行的方法。它可以根据指定的文件名或目录名找到可执行文件,并用它来取代原调用进程的数据段、代码段和堆栈段,在执行完之后,原调用进程的内容除了进程号外,其他全部被新的进程替换了。另外,这里的可执行文件既可以是二进制文件,也可以是Linux下任何可执行的脚本文件。

函数原型:

#include <unistd.h>
extern char **environ;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 execvpe(const char *file, char *const argv[],char *const envp[]);path:  可执行文件的路径名字
arg:   可执行程序所带的参数,第一个参数为可执行文件名字,没有带路径且arg必须以NULL结束
file:  如果参数file中包含/,则就将其视为路径名,否则就按 PATH环境变量,在它所指定的各目录中搜寻 可执行文件。返回值:exec函数族的函数执行成功后不会返回,调用失败时,会设置errno并返回-1,然后从原程序的调用点 接着往下执行。p:    使用文件名,并从PATH环境进行寻找可执行文件
v:    应先构造一个指向各参数的指针数组,然后将该数组的地址作为这些函数的参数。
e:    多了envp[]数组,使用新的环境变量代替调用进程的环境变量

2.execl()函数的使用

#include <stdio.h>int main(int argc,char **argv){int i;for(i = 0;i < argc;i++){printf("argv[%d]: %s\n",i,argv[i]);}return 0;
}

执行结果:

#include <stdio.h>
#include <unistd.h>int main(int argc ,char **argv){printf("before execl!\n");if(execl("./exe","exe","abcd",NULL) == -1){printf("execl filed!\n");perror("why");}printf("Execute after failure!\n");return 0;
}

执行结果:

举例:获取系统时间

#include <stdio.h>
#include <unistd.h>int main(int argc ,char **argv){printf("this pro get system date:\n");if(execl("/bin/date","date",NULL,NULL) == -1){printf("execl filed!\n");perror("why");}printf("Execute after failure!\n");return 0;
}

执行结果:

3.execlp()函数的使用

1.那么execl函数后面加一个p是什么意思呢?p:使用文件名,并从PATH环境进行寻找可执行文件,
2.带p的函数包括execlp、execvp、execvpe,如果参数file中包含/,则就将其视为路径名,否则就3.按 PATH环境变量,在它所指定的各目录中搜寻可执行文件。举个例子,PATH=/bin:/usr/bin

接着上面的demo我们继续,比如我现在想要获取时间,需要用到date命令

#include <stdio.h>
#include <unistd.h>
int main(int argc ,char **argv){printf("before execl!\n");    if(execlp("date","date",NULL,NULL) == -1){printf("execl filed!\n");perror("becasue");}printf("Execute after failure!\n");return 0;
}

execlp函数会通过我们给出的data在系统变量中寻找文件,找到调用,否则error-1

插一句:whereis 想要查看命令,作用是查看命令的绝对路径比如whereis ls,可以查看ls的绝对路径
echo $ PATH Linux查看当前系统环境变来量
export PATH=$ PATH:(pwd查看当前的路径)
比如:
pwd(回车) /home/xxx/process
export PATH=$ PATH: /home/xxx/process ,这样就把当前路路径加到环境变量中了

执行结果:

4.execvp()函数的使用

那么带v的函数是什么意思呢? execv、execvp、execve,应先构造一个指向各参数的指针数组,然后将该数组的地址作为这些函数的参数。
也就是在函数外面指定好指针数组,exec函数直接使用


#include <stdio.h>
#include <unistd.h>int main(void){char *argv[] = {"ls","-l",NULL};if(execvp("ls",argv) == -1){printf("execl filed!\n");perror("becasue");}printf("Execute after failure!\n");return 0;
}//先指定好char *argv[] = {"ls","-l",NULL};,我们exec函数直接使用,一样的效果,目的一样,使用方法不一样

执行结果:

5.execv()函数的使用

#include <stdio.h>
#include <unistd.h>int main(){char *argv[] = {"ps",NULL,NULL};if(execv("/bin/ps",argv) == -1){ //相对于execvp来讲,要加执行文件的路径printf("execvp filed!\n");perror("why");}printf("Execute after failure!\n");return 0;
}

执行结果:

总结:

l : 使用参数列表
p:使用文件名,并从PATH环境进行寻找可执行文件
v:应先构造一个指向各参数的指针数组,然后将该数组的地址作为这些函数的参数。
e:多了envp[]数组,使用新的环境变量代替调用进程的环境变量

exec族函数详解(execl, execlp, execle, execv, execvp, execvpe )相关推荐

  1. Linux 进程11【exec族函数(execl, execlp, execle, execv, execvp, execvpe)】

    linux进程-exec族函数(execl, execlp, execle, execv, execvp, execvpe) 原文链接:https://blog.csdn.net/u014530704 ...

  2. Linux进程5:exec族函数(execl, execlp, execle, execv, execvp, execvpe)总结及exec配合fork使用

    exec族函数(execl, execlp, execle, execv, execvp, execvpe)及exec配合fork使用 exec族函数函数的作用: 我们用fork函数创建新进程后,经常 ...

  3. exec族函数————execl, execlp, execle, execv, execvp, execvpe

    exec族函数 exec族函数的作用[^1] exec族函数的定义 函数原型: exac函数归为带l.带p.带v.带e 四类来说明参数特点 一.带l的一类exac函数(l表示list),包括execl ...

  4. linux进程---exec族函数(execl, execlp, execle, execv, execvp, execvpe)

    原文链接:https://blog.csdn.net/u014530704/article/details/73848573 exec族函数函数的作用: 我们用fork函数创建新进程后,经常会在新进程 ...

  5. 10.linux进程---exec族函数(execl, execlp, execle, execv, execvp, execvpe)

    1.exec族函数函数的作用: 1.exec族函数的作用: 我们用fork函数创建新进程后,经常会在新进程中调用exec函数去执行另外一个程序.当进程调用exec函数时,该进程被完全替换为新程序.因为 ...

  6. 学习笔记——exec族函数详解(execl, execlp, execle, execv, execvp, execvpe )

    exec族函数的定义 定义 exec函数族提供了一个在进程中启动另一个程序执行的方法.它可以根据指定的文件名或目录名找到可执行文件,并用它来取代原调用进程的数据段.代码段和堆栈段,在执行完之后,原调用 ...

  7. exec族函数(execl, execlp, execle, execv, execvp, execvpe)

    1.exec族函数的作用:我们用fork函数创建新进程后,经常会在新进程调用exec函数去执行另外一个程序. 当进程调用exec函数时,该进程被完全替换为新程序,因为调用exec函数并不创建新进程,所 ...

  8. Linux进程之exec镞函数的介绍(execl, execlp, execle, execv, execvp, execvpe)

    exec族函数函数的作用: 我们用fork函数创建新进程后,经常会在新进程中调用exec函数去执行另外一个程序.当进程调用exec函数时,该进程被完全替换为新程序.因为调用exec函数并不创建新进程, ...

  9. Linux进程 exec族函数(execl,execlp,execle,execv,execvp,execcvpe)

    exec族函数的作用 我们用fork函数创建新进程后,经常会在新进程中调用exec函数去执行另外一个程序.当进程调用exec函数时,该进程被完全替换为新程序.因为调用exec函数并不创建新进程,所以前 ...

最新文章

  1. 72万奖金!DCIC 2021数据竞赛正式报名了!
  2. 学习笔记----周志华《机器学习》第五章(神经网络)(一)
  3. Objective C运行时(runtime)技术总结,好强大的runtime
  4. Linux虚拟化KVM-Qemu分析(十)之virtio驱动
  5. api arx autocad_AutoCAD ObjectARX(VC)开发基础与实例教程 此书是利用ObjectARX对AutoCAD二次开发的教程 - 下载 - 搜珍网...
  6. 小布语音下载安装_一加语音助手小布体验:还有很长的路要走
  7. 大数据应用案例---用户画像与精准营销
  8. Android定位功能实现
  9. QCC3040/QCC3020主要差异对比
  10. 学ASP.NET入门编程,合适么?
  11. matlab数字转换罗马数字,罗马数字(1到1000) 1到1000的叠加是多少
  12. 网易视频云:为何说张三丰是个优秀的程序员?
  13. 期货现货升跌水(期货下跌现货一定下跌吗)
  14. 高校学籍管理系统 _数据库系统概论课程设计
  15. Mathematics Subject Classification (MSC)
  16. 我的世界java边境之地_我的世界:MC人迹罕至的6种“边境之地”,最后1种让人后背发凉!...
  17. 2019年5月1日起安卓应用应基于API 26开发
  18. 262. Trips and Users
  19. SpringMVC 2.HelloWorld
  20. 千只瓶子找毒药的问题

热门文章

  1. 深度学习与多层神经网络的区别
  2. 谷歌浏览器主页被挟持篡改2345www.dh012.com
  3. WIN10没有照片查看器【已解决】
  4. linux还原环境,Linux环境利用恢复被rm意外删除数据文件
  5. 爬取携程景点可能遇到的问题
  6. java如何虚拟ip_Linux建立虚拟ip的方法
  7. 娄底环宇中等职业技术学校
  8. CDH和Hadoop的区别
  9. 基于观测器的T-S模糊系统故障分析simulink仿真
  10. 使用JS判断用户操作系统是否安装某字体