exec函数簇

一、main 函数的参数定义

在C语言中,main 函数是程序执行的入口点。main 函数可以接受参数,这些参数通常用于从命令行接收输入。main 函数的参数定义通常遵循以下形式:

int main(int argc, char *argv[])

或者等价地:

int main(int argc, char **argv)

这里,argc 和 argv 是 main 函数的两个参数,它们用于处理命令行参数:

  • argc(Argument Count):这是一个整数,表示命令行中传递给程序的参数数量。至少为1,因为第一个参数(argv[0])始终是程序的名称或路径。

  • argv(Argument Vector):这是一个指向字符指针数组的指针,也可以看作是一个字符串数组。每个字符串代表一个命令行参数。argv[0] 是程序的名称或路径,argv[1] 是第一个参数,依此类推,直到 argv[argc-1],它表示最后一个参数。数组以 NULL 指针结尾,但在实际使用中,你通常不需要访问这个 NULL 指针,因为 argc 已经告诉了你参数的数量。

例如:

二、execl

execl函数是exec函数簇中的一个,用于执行一个外部程序。execl函数的具体参数和行为如下:

int execl(const char *path, const char *arg, ..., /* (char  *) NULL */ );

参数说明

  • path:指定要执行的外部程序的完整路径。如果路径中包含空格或特殊字符,通常需要将整个路径用引号括起来,但这取决于具体的shell和上下文环境。然而,在execl函数的直接调用中,路径是直接作为字符串参数传递的,所以不需要考虑shell的引号规则。

  • arg:这是传递给程序的第一个参数。在C程序中,通常将程序的名称作为第一个参数传递,但这并不是必需的。第一个参数之后的参数(如果有的话)应该紧跟在arg之后,并在最后一个参数之后以(char *) NULL结尾。注意,execl函数采用可变参数列表,所以你可以传递任意数量的参数给被执行的程序,但必须以NULL结尾。

  • ...:这表示函数接受可变数量的参数,这些参数将作为命令行参数传递给要执行的程序。

  • (char *) NULL:这是参数列表的结束标记,表示没有更多的参数要传递给程序。注意,这里的NULL必须显式地作为最后一个参数传递,因为execl函数无法像某些其他exec函数那样通过参数数量来自动推断列表的结束。

返回值

  • 如果execl函数调用成功,则不会返回,因为当前进程的映像将被新程序的映像替换。
  • 如果调用失败,则返回-1,并设置全局变量errno以指示错误原因。

注意事项

  • 在使用execl函数时,需要确保提供的路径是正确的,并且程序具有执行权限。
  • 由于execl函数采用可变参数列表,因此在实际编程中,可能需要使用宏或内联函数来生成参数列表,特别是在参数数量不确定的情况下。
  • 由于execl函数要求以NULL结尾的参数列表,因此在传递参数时需要特别注意不要遗漏这个结束标记。

示例 

三、execv

execv函数是exec函数族的一个成员,用于在当前进程中执行一个指定的程序。该函数的参数具体说明如下:

函数原型

#include <unistd.h>  
int execv(const char *path, char *const argv[]);

参数说明

  • path:这是一个指向以null结尾的字符串的指针,该字符串指定了要执行的程序的路径。这个路径可以是绝对路径,也可以是相对于当前工作目录的相对路径。

  • argv:这是一个指向字符指针数组的指针,该数组包含了要传递给新程序的参数列表。数组中的第一个元素(argv[0])通常指定了新程序的名称,尽管这个名称对于新程序的实际执行并不总是必要的,但它经常用于错误消息或程序内部的日志记录。数组的最后一个元素必须是一个空指针(NULL),用于表示参数列表的结束。

返回值

  • 如果execv函数执行成功,则当前进程的映像会被新程序的映像替换,因此execv函数不会返回。
  • 如果execv函数执行失败,则返回-1,并设置全局变量errno以指示错误原因。

注意事项

  • 在使用execv函数时,需要确保提供的程序路径是正确的,并且程序具有执行权限。
  • execv函数会替换当前进程的映像,包括代码、数据、堆和栈等,因此在新程序开始执行之后,原程序的代码和数据将不再存在。
  • 由于execv函数成功时不会返回,因此通常会在调用execv之前进行一些准备工作,并在调用之后添加错误处理代码来处理可能的失败情况。

 示例

 

四、execvp

execlp 属于 exec 函数族,该族函数用于用一个新的进程映像替换当前进程的映像。execlp 函数的特别之处在于它会在 PATH 环境变量所指定的目录中查找符合参数 file 的文件名,找到后便执行该文件。

函数原型如下:

#include <unistd.h>  
int execlp(const char *file, const char *arg, ...);
  • 参数

    • file:要执行的程序的文件名(不包含路径)。execlp 会在 PATH 环境变量指定的目录列表中查找这个文件。
    • arg:传递给要执行程序的参数,第一个 arg 通常设置为程序的名称(虽然这不是必须的),之后的参数是实际要传递给程序的参数。参数列表必须以 NULL 结尾。
  • 返回值

    • 如果执行成功,execlp 不会返回,因为当前进程的映像已经被新程序替换。
    • 如果执行失败,execlp 返回 -1,并将错误码存储在全局变量 errno 中。

示例

参考代码如下:

https://gitee.com/yong-tao-zhang/projcet_yueqian/tree/master/8-24icon-default.png?t=N7T8https://gitee.com/yong-tao-zhang/projcet_yueqian/commit/5e694200e55ce51d743a25e5e76a7bcf130bee12

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/408033.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

91. UE5 RPG 实现拖拽装配技能以及解除委托的绑定

在上一篇文章里&#xff0c;实现了通过选中技能&#xff0c;然后点击下方的装备技能插槽实现了技能的装配。为了丰富技能装配功能&#xff0c;在这一篇里&#xff0c;我们实现一下通过拖拽技能&#xff0c;实现拖拽功能&#xff0c;我们需要修改两个用户控件&#xff0c;一个就…

杰发科技AC7840——CAN通信简介(8)_通过波特率和时钟计算SEG_1/SEG_2/SJW/PRESC

通过公式计算 * 波特率和采样点计算公式&#xff1a;* tSeg1 (S_SEG_1 2); tSeg2 (S_SEG_2 1).* BandRate (SCR_CLK / (S_PRESC 1) / ((S_SEG_1 2) (S_SEG_2 1))), SCR_CLK 为CAN 模块源时钟* SamplePoint (tSeg1 / (tSeg1 tSeg2)). {0x0D, 0x04, 0x04, 0x3B},…

文件IO和多路复用IO

目录 前言 一、文件 I/O 1.基本文件 I/O 操作 1.1打开文件 1.2读取文件内容 (read) 1.3写入文件 (write) 1.4关闭文件 (close) 2.文件指针 二、多路复用 I/O 1.常用的多路复用 I/O 模型 1.1select 1.2poll 1.3epoll 2.使用 select、poll 和 epoll 进行简单的 I/O…

软件测试最全面试题,了解一下

一、前言 近期有不少同学&#xff0c;朋友问我什么是软件测试&#xff0c;它是干什么的&#xff0c;我适不适合做、这行发展前景、工资怎么样等等等…在这里我把问题总结一下&#xff0c;整理一篇文章出来。 我也看过很多贴吧、论坛&#xff0c;在入行之前对这块都是迷茫的&a…

数据结构----栈

一丶概念 只能在一端进行插入和删除操作的线性表&#xff08;又称为堆栈&#xff09;&#xff0c;进行插入和删除操作的一端称为栈顶&#xff0c;另一端称为栈底 二丶特点 先进后出 FILO first in last out 后进先出 LIFO last in first out 三丶顺序栈 逻辑结构&…

Nginx: 配置项之http模块connection和request的用法以及limit_conn和limit_req模块

connection和request connection 就是一个连接, TCP连接 客户端和服务器想要进行通信的话&#xff0c;有很多种方式比如说, TCP的形式或者是UDP形式的通常很多应用都是建立在这个TCP之上的所以, 客户端和服务器通信&#xff0c;使用了TCP协议的话&#xff0c;必然涉及建立TCP连…

Java JNA调用C函数常见问题及解决方法

目录 1 undefined symbol&#xff1a;xxx2 Java映射C数组乱码3 Java使用String接收不到C函数返回的char*4 Unable to load DLL xxx.dll5 java.lang.UnsatisfiedLinkError: %1 不是有效的 Win32 应用程序6 无效的ELF头7 Structure array elements must use contiguous memory8 j…

msvcp120.dll丢失是怎么回事?几种靠谱修复msvcp120.dll的方法

在使用基于Windows的计算机进行日常工作或娱乐时&#xff0c;您可能会遇到一个错误消息&#xff1a;“无法启动此程序&#xff0c;因为计算机中丢失msvcp120.dll。”这样的提示通常在尝试启动某些程序或游戏时弹出&#xff0c;导致应用无法正常运行。这个问题通常与系统中的某个…

CSS3页面布局-三栏-固定宽度布局

布局的基本概念 多栏布局三种基本实现方案&#xff1a;固定宽度&#xff0c;流动&#xff0c;弹性。 固定宽度布局&#xff1a;大小不会随用户调整浏览器窗口大小。 一版960-1100,960常见&#xff0c;可以被3,4,5,6,8,10,12,16整除。 流动布局&#xff1a;大小会随用户调整…

数据结构——链式二叉树的实现与分治编程思维(c语言实现)

目录 前言&#xff1a; 1.前置说明 2.链式二叉树的遍历 2.1 前序&#xff0c;中序及后续遍历 2.2 前序遍历实现 2.3 中序遍历实现 2.4 后续遍历实现 3.结点个数以及高度等 3.1 结点个数 3.2 结点高度 3.3 叶子结点的个数 前言&#xff1a; 在之前的学习中&…

【图解秒杀系列】秒杀技术点——多级缓存、分层过滤

【图解秒杀系列】秒杀技术点——多级缓存、分层过滤 多级缓存本地缓存分布式缓存 分层过滤 多级缓存 多级缓存在秒杀系统中是非常重要的一个技术点&#xff0c;是应对秒杀场景瞬时高并发读请求的一种有效手段。通过在数据库前面加入多个缓存层&#xff0c;达到过滤掉大多数读请…

优惠券秒杀项目

一、添加优惠券的同时&#xff0c;将优惠券信息&#xff0c;以及用户列表放到redis中 Override Transactional public void addSeckillVoucher(Voucher voucher) {// 保存优惠券save(voucher);// 保存秒杀信息SeckillVoucher seckillVoucher new SeckillVoucher();seckillVou…

easyexcel--多sheet页导入导出

多sheet页导出 核心代码就是下图里面的&#xff0c;使用EasyExcel.writeSheet创建一个sheet,然后用excelWriter写入就行了&#xff0c;很简单 GetMapping("downloadMultiSheet")public void downloadMultiSheet(HttpServletResponse response) throws IOException {…

【Qt】输入类控件QDateTimeEdit

目录 输入类控件QDateTimeEdit 例子&#xff1a;实现日期计算器 输入类控件QDateTimeEdit QDate Edit作为日期的微调框 QTime Edit作为时间的微调框 QDateTimeEdit作为时间日期的微调框 下面主要讲解QDateTimeEdit&#xff1a; 核心属性 属性说明 dateTime 时间⽇期的值.…

【Hot100】LeetCode—101. 对称二叉树

目录 1- 思路借助队列 2- 实现⭐101. 对称二叉树——题解思路 3- ACM 实现 原题连接&#xff1a;101. 对称二叉树 1- 思路 借助队列 1- 创建队列&#xff1a;Queue<TreeNode> queue&#xff0c;初始化加入 root.left 和 root.right2- 判断逻辑&#xff1a;while(!queu…

软件开发者的首选:最佳Bug测试工具Top 10

本篇文章介绍了以下软件bug测试管理工具&#xff1a;PingCode、Worktile、Test360、禅道、码云Gitee、优云测试、Jira、GitHub、Axosoft、Bugzilla。 在开发过程中&#xff0c;Bug的管理往往是最让人头疼的问题之一。小问题积累起来不仅会拖延项目进度&#xff0c;还可能影响到…

如何优雅处理异步组件加载:Vue 3 的 Suspense 特性

在日常开发中&#xff0c;我们可能会遇到网络不佳或内容加载时间较长的情况。如果当前页面没有任何内容提示&#xff0c;用户的体验非常糟糕&#xff0c;可能会反复刷新以便加载成功。因此&#xff0c;我们需要给用户提供一个加载中的效果&#xff0c;告知用户“我在努力加载中…

基于单片机的人体健康监测系统的设计

本设计以STM32F103C8T6单片机作为主控&#xff0c;通过MAX30102采集心率、血氧值&#xff0c;通过MSP20血压采集模块检测血压值&#xff0c;通过MLX90614红外体温采集模块检测体温值。OLED屏可以显示以上检测的信息&#xff0c;并可以通过蓝牙模块将信息发送给手机APP。当检测值…

利用VirtualBox安装CentOS系统

博主这次用VirtualBox虚拟机安装CentOS系统。无论是大小型项目都是要发布到云主机上面&#xff0c;必然要用到Linux系统&#xff0c;有的人的本地电脑硬件配置不高&#xff0c;没有办法运行数据库集群&#xff0c;所以只能借助云主机。毕竟云主机也是Linux系统&#xff0c;大家…

大数据-92 Spark 集群 SparkRDD 原理 Standalone详解 ShuffleV1V2详解 RDD编程优化

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff08;已更完&#xff09;HDFS&#xff08;已更完&#xff09;MapReduce&#xff08;已更完&am…