linux c-exec系列函数学习

函数原型

cpp 复制代码
  #include <unistd.h>    

   int execl(const char *pathname, const char *arg, ...
            /* (char  *) NULL */);
   int execlp(const char *file, const char *arg, ...
            /* (char  *) NULL */);
   int execle(const char *pathname, const char *arg, ...
            /*, (char *) NULL, char *const envp[] */);
   int execv(const char *pathname, char *const argv[]);
   int execvp(const char *file, char *const argv[]);
   int execvpe(const char *file, char *const argv[],
            char *const envp[]);

函数说明

这些函数都是以替换的方式,创建一个新的进程替代当前的进程。新的进程与原来的进程号相同,所有的用户空间(代码段、数据段)及部分的内核空间都可以视为是全新的。要注意与fork函数的区别。

  1. -l 可理解为list,函数参数类似列出的方式,但最后一个参数必须以NULL结尾
  2. -p
    1. 带p的等效为shell中直接使用指令,会从PATH的路径查找相关的可执行文件;
    2. 不带p的函数,则必须使用相对路径或者绝对路径
  3. -e
    1. 带e的函数,新进程的环境变量会被清空,来源是原进程传递过来的;
    2. 不带e的函数,则使用原进程的环境变量(理解:进程替代这一代概念,但又要注意用户空间是全新的)

可变参数 :可以参考va_start系列的(宏)函数,因此,无论是...,还是vector,还是环境变量的数组,最后一个元素必须是NULL!

返回值

The exec() functions return only if an error has occurred. The return value is -1, and errno is set to indicate the error.

exec系列函数只有 在执行错误的有返回值,且返回值为**-1**,相关的错误代码会被设置到errno中

相关推荐
小雪崩5 小时前
嵌入式学习 day27:标准IO
linux·c语言·学习
hsjiasb5 小时前
FreeRTOS学习(三十五)——系统架构综合项目
学习·学习笔记·freertos
Arnold.Shen6 小时前
Dell Storage SC - 如何发送SupportAssist,并启用安全控制台
linux·安全
wunaiqiezixin6 小时前
MIT 6.S081 xv6 源码精读(Scheduling):sched、scheduler
linux·unix·os·xv6·mit6.s081
YM52e6 小时前
语言地区选择器-鸿蒙ArkTS国际化页面设计
学习·华为·harmonyos
不是光头 强6 小时前
Java 后端 AI 技术选型与学习路线
java·人工智能·学习
cloudification6 小时前
virtual
学习
书生执笔画浮沉6 小时前
记录一个由浮点运算引起的崩溃
linux
MartinYeung57 小时前
[论文学习]δ-STEAL:基于本地差分隐私的大语言模型窃取攻击
网络·学习·语言模型
paopaokaka_luck7 小时前
基于springboot3+vue3的文山民族文化资源展示与推广平台(协同过滤算法、Echarts 图形化分析)
java·前端·spring boot·学习·echarts