【回眸】技术干货——Linux内核(九)exec()族函数之execl

前言

exec()族函数有哪些,分别有什么作用?

传参代码

#include<stdio.h>
#include<sys/types.h>
#include<unistd.h>
int main(int argc,char *argv[]){
    int i = 0;
    for (i=0;i<argc;i++)
    {
        printf("argv[%d]:%s\n",i,argv[i]);
    }    
    return 0;
}

运行效果展示

可以看到程序运行后输入了三个参数并且都循环打印出来了,并且注意到这里把运行的命令作为第一个参数打出来了

execl函数有什么用?(使用参数列表)

#include<stdio.h>
#include<sys/types.h>
#include<unistd.h>
//头文件
//函数原型:int execl(const char *path,const char *arg,...)
//(void)无返回值
//打印:在execl前
//如果:execl(打开路径,参数1,参数2,参数2,参数3,NULL) == -1
//打印execl失败
//打印perror(“why”)
//打印“execl之后”
int main(void){
    printf("before execl\n");
    if(execl("./bin/echoarg","echoarg","abc",NULL) == -1);
    {
        printf("use execl failed!\n");
        perror("why");
    }
    printf("after execl\n");
    return 0;
}

运行效果展示

可以看到效果图如上,发现最后文件返回值是-1,显示调用失败,那么调用失败的原因也用perror显示出来了,原因是路径不正确。于是我们把上一个传参代码命名为echoarg.c且运行一下。

并且将路径修改一下,再次编译运行process8.c

#include<stdio.h>
#include<sys/types.h>
#include<unistd.h>
//头文件
//函数原型:int excel(const char *path,const char *arg,...)
//(void)无返回值
//打印:在execl前
//如果:excel(打开路径,参数1,参数2,参数2,参数3,NULL) == -1
//打印excel失败
//打印perror(“why”)
//打印“excel之后”
int main(void){
    printf("before execl\n");
    if(execl("./echoarg","echoarg","abc",NULL) == -1);
    {
        printf("use execl failed!\n");
        perror("why");
    }
    printf("after execl\n");
    return 0;
}

运行效果展示

可以发现execl原来是调用了我们写在路径上的C文件,同理我们也可以用execl函数调用ps命令和其他命令诸如top命令等等,但是需要他的绝对路径。

后记碎碎念

Linux是一个系列,可以点击专栏查看同系列的其他文章,希望能帮到屏幕前的每一位应届生往届生,该博文最初发表在CSDN上。

#校招求职有谈薪空间吗##找工作前vs找工作后的心路变化##26届秋招投递记录##央国企投递记录##租房前辈的忠告#
应届生必学实用物联网技术 文章被收录于专栏

本专栏助应届生从物联网小白成长为企业争抢的技术人才,聚焦三大核心技术:传感器应用(环境监测)、嵌入式开发(STM32/Arduino)、通信协议(LoRa/NB-IoT/MQTT),配合10+实战项目(如智能温湿度监控系统)积累项目经验。覆盖智能硬件、工业物联网、智能家居领域岗位需求,解析企业招聘技术重点与面试题,帮电子、计算机、自动化等专业学生构建知识体系,提前锁定名企Offer!

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务