linux / execl

本文详细介绍了Linux中的execl函数用法,包括参数列表、返回值、示例及其实现原理。重点讲解了函数如何替换进程并停止原有代码执行。

一、使用说明 

#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 退出了,都不会被执行。

转载:linux execl函数讲解,Linux下execl函数学习_刘轩鸿的博客-优快云博客

(SAW:Game Over!)

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值