linux系统编程学习day3--exec函数族
来源:互联网 发布:淘宝甩货文案 编辑:程序博客网 时间:2024/05/22 16:55
exec函数族
接上次的fork()函数的最后的问题,这里通过exec函数族可以解决的,先简略说一说exec函数族大致的作用:
这一族函数都是可以将当前进程的.text、.data替换成苏要加载的程序的.text、.data,然后让进程从新的.text第一条指令开始执行,但进程ID不变,就等于将fork()出来的新的进程的内容全部给替换掉,但是那个外壳是不换的,因为fork()出来一个进程的话会完全拷贝现有进程的虚拟地址空间,然后执行fork()之后的语句,然后调用exec函数就把fork()出来的地址空间然后都给替换成新的要执行的程序的地址空间,可能语言不好表述,可以参考上一天的fork()的那个图来理解:
这个图我是简略画的,其实fork()之后会完全拷贝整个进程的虚拟地址,而不是单单对代码一个拷贝,这里只是将代码抽象出来这样来理解。
原理知晓了那么来看看exec这个函数族里面有哪些函数
我从视频中学习到的大致就是这六个函数,可以看到这些函数的共通点就是前面都是exec开头,然后有区别的就是后面的字母,来分析一下l、p、v、e这些字母分别代表什么意思。
首先可以看到l里面带有l字样的都有一个共同的const char *arg的参数而且后面都有...,这个就可以对应在终端中输入命令时后面那一个个参数,所以l是list的意思。
v的话可以看到都有char *argv[]这个参数,这个参数在main(int argc,char *argv[])中看见过吧,所以这个应该就是需要我们把需要执行的命令给打包成一个char *argv[]格式的参数传递进去,这个就没有...了,就是固定有这么多个参数。
p的话就是需要借助环境变量PATH,可以看到p的第一个参数都是 char *file这种的,不需要我们去传递什么路径之类的,那么就是根据环境变量开始的
e的话是环境变量表,这个暂时没去深究过
所有的exec函数族的返回值只有失败的返回,成功之后就会直接执行新的程序了,所以我们不需要去判断什么返回只需要一个exec()之后直接跟一个打印错误原因的函数就行,如果运行到这一句了那么就表明这个程序并没有被替代,所以还是原来的程序。
- linux系统编程学习day3--exec函数族
- linux 系统编程-学习笔记7-进程/fork/vfork/exec函数族
- Linux系统编程——进程替换:exec 函数族
- Linux系统编程——进程替换:exec 函数族
- Linux系统编程——进程替换:exec 函数族
- 【Linux系统编程】进程替换:exec 函数族
- Linux系统编程——进程替换:exec 函数族
- Linux系统编程——进程替换:exec 函数族
- linux 进程控制编程 exec族函数
- Linux系统编程_9_进程控制之exec 函数
- Linux系统进程控制编程(三)——exec函数族的使用
- Linux系统进程控制编程(三)——exec函数族的使用
- Linux系统进程控制编程(三)——exec函数族的使用
- Linux系统进程控制编程(三)——exec函数族的使用
- c++ 学习笔记(高级linux编程) day3
- Linux exec函数族
- Linux exec函数族
- Linux exec函数族
- Java之File类总结——2017.11.19
- Raspberry pi zero w 开启 USB网卡 通过USB联网
- banner轮播
- 取消MFC的自动菜单折叠
- web项目中的路径
- linux系统编程学习day3--exec函数族
- 剑指offer-操作给定的二叉树,将其变换为源二叉树的镜像
- Shareprefences的使用
- Mutisim 的BJT电路仿真与分析
- 前端项目知识点整理-滚动加载更多
- find_first_of()和 find_last_of()
- scala编程02--变量
- Wannafly挑战赛3 C.位数差(树状数组)
- java.io 包