【回眸】技术干货——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!