exec 族函数

 目录

execve()函数

 execl()函数运行 ls 命令

execv()函数运行 ls 命令

 execlp()函数运行 ls 命令

 execvp()函数运行 ls 命令

 execle()函数运行 ls 命令

execvpe()函数运行 ls 命令 


       当子进程的工作不再是运行父进程的代码段,而是运行另一个新程序的代码,那么这个时候子进程可以通过 exec 函数来实现运行另一个新的程序。

        为什么需要在子进程中执行新程序?虽然可以直接在子进程分支编写子进程需要运行的代码,但是不够灵活,扩展性不够好,直接将子进程需要运行的代码单独放在一个可执行文件中更好吗, 所以就出现了 exec 操作
 

execve()函数

        系统调用 execve()可以将新程序加载到某一进程的内存空间,通过调用 execve()函数将一个外部的可执行文件加载到进程的内存空间运行,使用新的程序替换旧的程序,而进程的栈、数据、以及堆数据会被新程序的相应部件所替换,然后从新程序的 main()函数开始执行

代码1

         定义俩个字符指针数组,再使用execve函数将当前进程替换为一个新程序,执行的程序文件的路径名argv[1],新进程的参数和环境变量将会被设置为arg_arrenv_arr中指定的值,如果execve返回-1,表示执行失败,此时程序将打印一个错误消息,并以-1的返回值退出

代码2

 

         打印程序的命令行参数和环境变量

 验证

 execl()函数运行 ls 命令

execv()函数运行 ls 命令

         execl()和 execv()都是基本的 exec 函数,都可用于执行一个新程序,它们之间的区别在于参数格式不同;第一个参数参数意义和格式都相同, ,指向新程序的路径名,既可以是绝对路径、也可以是相对路径。 execl()和 execv()不同的在于第二个参数, execv()的是字符串指针数组; 而 execl()把参数列表依次排列,使用可变参数形式传递,本质上也是多个字符串,以 NULL 结尾 

 execlp()函数运行 ls 命令

 execvp()函数运行 ls 命令

 execle()函数运行 ls 命令

execvpe()函数运行 ls 命令 

         execle()和 execvpe()这两个函数在命名上加了一个 e,这个 e 其实表示的是 environment 环境变量,意味着这两个函数可以指定自定义的环境变量列表给新程序

猜你喜欢

转载自blog.csdn.net/weixin_46829095/article/details/129665472