一、使用说明
#include <unistd.h>
int execl(const char *path, const char *arg, ...);
函数说明
execl() 其中后缀"l"代表 list 也就是参数列表的意思。
第一参数 path 字符指针所指向要执行的文件路径, 接下来的参数代表执行该文件时传递的参数列表:argv[0],argv[1]... 最后一个参数须用空指针 NULL 作结束。
函数返回值
成功则不返回值, 失败返回 -1, 失败原因存于 errno 中,可通过 perror() 打印
二、栗子
#include <stdio.h>
#include <unistd.h>
int main()
{
if (execl("/bin/ls", "ls", "-ahl", "/etc/passwd", NULL) < 0) {
perror("execl error");
} else {
printf("execl success\n");
}
return 0;
}
结果
-rw-r--r-- 1 root root 2.6K 5月 16 07:03 /etc/passwd
大家可以清楚的看到, 执行 /bin 目录下的 ls,第一参数为程序名 ls,第二个参数为"-al",第三个参数为"/etc/passwd",但是没有输出 success!!
这是为什么呢?
execl函数特点:
当进程调用一种 exec 函数时,该进程完全由新程序代换,而新程序则从其 main 函数开始执行。因为调用 exec 并不创建新进程,所以前后的进程 ID 并未改变。exec 只是用另一个新程序替换了当前进程的正文、数据、堆和栈段。
当前进程的正文都被替换了,那么 execl 后的语句,即便 execl 退出了,都不会被执行。
(SAW:Game Over!)
本文详细介绍了Linux中的execl函数用法,包括参数列表、返回值、示例及其实现原理。重点讲解了函数如何替换进程并停止原有代码执行。
453

被折叠的 条评论
为什么被折叠?



