开发者学堂课程【物联网开发- Linux 高级程序设计全套视频:Execl 函数】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/660/detail/10997
Execl 函数
execl 函数
先进行execl 函数、execlp 函数、execle 函数的学习。
execl函数:
int execl(const char *pathname,
const char *arg0,***,
NULL);
execl 函数要在一个进程中启动程序,要在新程序的代码内容替换当前进程。第一个是启动的路径 pathname,可以是绝对路径也可以是相对路径,;之后给 const char *arg0,***, 可以传n个参数;NULL 代表参数的结尾,比如有8个参数,当execl分析这些参数的时候,null 就认为之后没有参数是作为结尾。这个函数成功的话是不用返回0的,空间就会被替换。
代码示例:
启动这个程序运行进程,execl 函数第一个参数是启动程序的路径(相对路径和绝对路径),第二个参数必须是要有启动的文件名,没有的话第三个参数不起作用,最后用 NULL 作为结尾;在运行程序的时候把 execl 执行ls文件,一旦执行成功ls的代码就会替代当前进程的代码转而执行ls的代码,在execl函数的时候就已经把当前代码执行过了,所以printf是没有机会的,所以一旦execl函数执行过后就不会执行后续内容了,而是执行启动程序的代码。
#include
#include
Int main(int argc,char *argv[])
{
execl(“/bin/ls”,”ls”,”-a”.”-l”,”-h”,NULL);
printf(“after execl\n”);
return 0;
}
在运行界面输入语句:
gcc execl.c -o exel
ls
execl.c tags
./execl
运行结果:
没有执行 printf 语句,因为 execl 就已经替换成当前的ls文件并启动该程序
注意,execl 函数首先第一个参数是启动程序的路径,从第三个参数之后才是文件的内容。
Execl 是启动一个新的程序,进程还是本身的进程,进程号不变,只是进程的内容被发生了替换。