当前位置: 首页 > news >正文

Linux 调用可执行程序

Linux 调用可执行程序

    • 1. `system()` 函数
      • 1.1 `system()` 函数的声明
      • 1.2 `system()` 函数的不同场景返回值
      • 1.3 `system()` 函数的代码示例
    • 2. `exec()` 函数族
      • 2.1 `exec()` 函数族的声明
      • 2.2 `exec()` 函数族执行失败的情况
      • 2.3 `exec()` 函数族的代码示例
    • 3. `exec()` 与 `system()` 的区别以及使用注意事项
    • 4. `exec()` 会创建新进程吗?新进程与原进程的关系
    • 5. 总结

在 Linux 系统中,我们经常需要在一个程序中调用另一个可执行程序。这可以通过多种方式实现,其中最常用的两种方式是使用 system() 函数和 exec() 函数族

1. system() 函数

1.1 system() 函数的声明

system() 函数的声明如下:

#include <stdlib.h>int system(const char *command);

1.2 system() 函数的不同场景返回值

system() 函数用于执行一个 shell 命令。它的返回值表示命令执行的退出状态

  • 正常情况下system() 函数返回执行的 shell 命令的退出状态。通常,0 表示成功,非 0 值表示失败。
  • 如果 system() 函数调用失败(例如,无法创建子进程或执行 shell 命令),则返回 -1。

1.3 system() 函数的代码示例

#include <stdio.h>
#include <stdlib.h>int main() {int ret = system("ls -l"); // 执行 ls -l 命令if (ret == 0) {printf("命令执行成功\n");} else if (ret == -1) {perror("system() 调用失败");} else {printf("命令执行失败,退出状态为 %d\n", ret);}return 0;
}

2. exec() 函数族

2.1 exec() 函数族的声明

exec() 函数族是一组函数,它们用于替换当前进程的映像,执行一个新的程序。exec() 函数族有很多不同的变体,它们的声明和参数略有不同,但功能基本相同。

以下是几个常用的 exec() 函数:

#include <unistd.h>int execl(const char *path, const char *arg0, ..., NULL);
int execlp(const char *file, const char *arg0, ..., NULL);
int execv(const char *path, char *const argv[]);
int execvp(const char *file, char *const argv[]);

2.2 exec() 函数族执行失败的情况

如果 exec() 函数族执行失败,则返回 -1,并设置 errno 来指示错误类型。常见的错误原因包括:

  • 文件不存在:指定的程序文件不存在。
  • 权限不足:当前用户没有执行指定程序的权限。
  • 内存不足:无法加载新的程序映像。
  • 参数错误:传递给 exec() 函数的参数不正确。

2.3 exec() 函数族的代码示例

#include <stdio.h>
#include <unistd.h>int main() {// 使用 execlp() 函数执行 ls -l 命令execlp("ls", "ls", "-l", NULL);// 如果 execlp() 执行失败,则会执行以下代码perror("execlp() 调用失败");return 1; // 返回 1 表示程序执行失败
}

3. exec()system() 的区别以及使用注意事项

  • 功能system() 函数用于执行一个 shell 命令,而 exec() 函数族用于替换当前进程的映像,执行一个新的程序。
  • 返回值system() 函数返回执行的 shell 命令的退出状态,而 exec() 函数族如果执行成功则不会返回,如果执行失败则返回 -1。
  • 进程system() 函数会创建一个新的子进程来执行 shell 命令,而 exec() 函数族则直接在当前进程中执行新的程序。

使用注意事项:

  • 由于 system() 函数会创建一个新的子进程,因此开销比 exec() 函数族要大
  • system() 函数执行的 shell 命令可能会受到 shell 注入攻击,因此应该避免使用用户提供的输入作为命令字符串。
  • exec() 函数族执行成功后,原进程的代码将不再执行,因此需要在调用 exec() 函数族之前做好必要的清理工作。

4. exec() 会创建新进程吗?新进程与原进程的关系

exec() 函数族不会创建新的进程。它会替换当前进程的映像,执行一个新的程序。这意味着原进程的代码、数据和堆栈都会被新的程序所覆盖。

新程序与原进程的关系:

  • 进程 ID:新程序的进程 ID 与原进程相同。
  • 父进程:新程序的父进程与原进程相同。
  • 环境变量:新程序会继承原进程的环境变量。
  • 文件描述符:新程序会继承原进程打开的文件描述符。

5. 总结

system() 函数和 exec() 函数族都是在 Linux 中调用可执行程序的常用方法。system() 函数使用简单,但开销较大,且存在安全风险;exec() 函数族效率高,但使用稍复杂

相关文章:

Linux 调用可执行程序

Linux 调用可执行程序 1. system() 函数1.1 system() 函数的声明1.2 system() 函数的不同场景返回值1.3 system() 函数的代码示例 2. exec() 函数族2.1 exec() 函数族的声明2.2 exec() 函数族执行失败的情况2.3 exec() 函数族的代码示例 3. exec() 与 system() 的区别以及使用注…...

MVCC面试怎么答

说到mvcc这个比较抽象的概念&#xff0c;很多人都有点束手无策。因为它实际上偏理论&#xff0c;实际应用中很难用到。但在面试中出现频率又很高&#xff0c;一问大部分都G。所以怎么精简回答并且能抓住重点就很关键了。往上详细解说MVCC的太多了&#xff0c;我这里没那么多废话…...

用Go实现 SSE 实时推送消息(消息通知)——思悟项目技术4

目录 简介 工作原理 例子 使用场景 简介 SSE&#xff08;Server - Sent Events&#xff09;是一种允许服务器向客户端实时推送更新的 Web 技术。是一种基于 HTTP 协议的单向通信机制&#xff0c;服务器可以在客户端建立连接后&#xff0c;持续不断地向客户端发送事件流。客…...

0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享一篇文章&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495; 目录 0基础…...

vue3:动态渲染后端返回的图片

问&#xff1a; div classleft-png 这里我用css设置了他的背景图片&#xff0c;但是现在我希望改为后端返回的图片&#xff0c;怎么写&#xff1f; 后端返回数据&#xff1a; const centerdata {img:;xxxx,title,xxxx,num:xxxx}&#xff1f; 回答&#xff1a; 好的&#xff…...

DeepSeek小白初识指南

1.什么是DeepSeek&#xff1f; DeepSeek是一个基于大语言模型&#xff08;LLM&#xff09;的智能助手&#xff0c;能够处理自然语言理解、生成、对话等任务。它广泛应用于聊天机器人、内容生成、数据分析等领域。 2.DeepSeek和OpenAI等大模型差异&#xff1f; 虽然DeepSeek和Op…...

图像锐化(QT)

如果不使用OpenCV&#xff0c;我们可以直接使用Qt的QImage类对图像进行像素级操作来实现锐化。锐化算法的核心是通过卷积核&#xff08;如拉普拉斯核&#xff09;对图像进行处理&#xff0c;增强图像的边缘和细节。 以下是一个完整的Qt应用程序示例&#xff0c;展示如何使用Qt…...

38.社区信息管理系统(基于springboothtml)

目录 1.系统的受众说明 2.需求分析及相关技术 2.1设计目的 2.2社区信息管理系统的特点 2.3可行性分析 2.3.1技术可行性 2.3.2运行可行性 2.4系统设计 2.4.1系统功能分析 2.4.2管理员权限功能设计 2.4.3业主权限功能设计 2.5系统的技术介绍 2.5.1 Html 2.5.2 Aja…...

游戏引擎学习第98天

仓库:https://gitee.com/mrxiao_com/2d_game_2 开始进行一点回顾 今天的目标是继续实现正常贴图的操作&#xff0c;尽管目前我们还没有足够的光照信息来使其完全有用。昨日完成了正常贴图相关的基础工作&#xff0c;接下来将集中精力实现正常贴图的基本操作&#xff0c;并准备…...

音频知识基础

音频知识基础 声音属性声音度量人耳特性通道数音频数字化传输接口 声音属性 响度 响度是人耳对声音强弱的主观感受&#xff1b; 主要和声波的振幅相关&#xff0c;同时也和频率有一定关系&#xff1b; 音调 音调是人耳对声音高低的主观感受&#xff1b; 主要与频率相关&#…...

【AI赋能】蓝耘智算平台实战指南:3步构建企业级DeepSeek智能助手

蓝耘智算平台实战指南&#xff1a;3步构建企业级DeepSeek智能助手 引言&#xff1a;AI大模型时代的算力革命 在2025年全球AI技术峰会上&#xff0c;DeepSeek-R1凭借其开源架构与实时推理能力&#xff0c;成为首个通过图灵测试的中文大模型。该模型在语言理解、跨模态交互等维…...

LabVIEW无人机飞行状态监测系统

近年来&#xff0c;无人机在农业植保、电力巡检、应急救灾等多个领域得到了广泛应用。然而&#xff0c;传统的目视操控方式仍然存在以下三大问题&#xff1a; 飞行姿态的感知主要依赖操作者的经验&#xff1b; 飞行中突发的姿态异常难以及时发现&#xff1b; 飞行数据缺乏系统…...

DeepSeek模型架构及优化内容

DeepSeek v1版本 模型结构 DeepSeek LLM基本上遵循LLaMA的设计&#xff1a; 采⽤Pre-Norm结构&#xff0c;并使⽤RMSNorm函数. 利⽤SwiGLU作为Feed-Forward Network&#xff08;FFN&#xff09;的激活函数&#xff0c;中间层维度为8/3. 去除绝对位置编码&#xff0c;采⽤了…...

html语义化

常见语义化标签有&#xff1a; &#xff08;1&#xff09;页面结构标签&#xff1a;<header>、<nav>、<main>、<article>、<section>、<aside>、<footer> &#xff08;2&#xff09;文本语义标签&#xff1a;<h1>-<h6>…...

python学习第十四天之机器学习名词介绍

名词介绍 1. 常用术语解释2.常见机器学习任务3. 机器学习常见算法1. 监督学习&#xff08;Supervised Learning&#xff09;2. 非监督学习&#xff08;Unsupervised Learning&#xff09;3.深度学习4.**对比总结** 1. 常用术语解释 拟合&#xff08;Fit&#xff09;&#xff1…...

天津三石峰科技——汽车生产厂的设备振动检测项目案例

汽车产线有很多传动设备需要长期在线运行&#xff0c;会出现老化、疲劳、磨损等 问题&#xff0c;为了避免意外停机造成损失&#xff0c;需要加装一些健康监测设备&#xff0c;监测设备运 行状态。天津三石峰科技采用 12 通道振动信号采集卡&#xff08;下图 1&#xff09;对…...

汽车与AI深度融合:CES Asia 2025前瞻

在科技飞速发展的当下&#xff0c;汽车与AI的融合正成为行业变革的关键驱动力。近日&#xff0c;吉利、极氪、岚图、智己等多家车企纷纷官宣与DeepSeek模型深度融合&#xff0c;其中岚图知音更是将成为首个搭载该模型的量产车型&#xff0c;这无疑是汽车智能化进程中的重要里程…...

前端实现 GIF 图片循环播放

前言 使用 img 加载 GIF 图片&#xff0c;内容只会播放一次&#xff0c;之后就会自动暂停&#xff1b; 通过定时器在一段时间后重新加载图片的方式&#xff0c;会导致浏览器内存不断增大&#xff0c;并且可能会有闪烁、卡顿的问题&#xff1b; ImageDecoder WebCodecs API 的…...

React - 事件绑定this

在 React 中&#xff0c;this 的绑定是一个常见问题&#xff0c;尤其在类组件中使用事件处理函数时。JavaScript 中的 bind 函数用于设置函数调用时 this 的值。 bind 函数的作用 bind() 方法创建一个新的函数&#xff0c;当被调用时&#xff0c;其 this 关键字被设置为提供的…...

STM32系统架构介绍

STM32系统架构 1. CM3/4系统架构2. CM3/4系统架构-----存储器组织结构2.1 寄存器地址映射&#xff08;特殊的存储器&#xff09;2.2 寄存器地址计算2.3 寄存器的封装 3. CM3/4系统架构-----时钟系统 STM32 和 ARM 以及 ARM7是什么关系? ARM 是一个做芯片标准的公司&#xff0c…...

web vue 项目 Docker化部署

Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段&#xff1a; 构建阶段&#xff08;Build Stage&#xff09;&#xff1a…...

C++实现分布式网络通信框架RPC(3)--rpc调用端

目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中&#xff0c;我们已经大致实现了rpc服务端的各项功能代…...

跨链模式:多链互操作架构与性能扩展方案

跨链模式&#xff1a;多链互操作架构与性能扩展方案 ——构建下一代区块链互联网的技术基石 一、跨链架构的核心范式演进 1. 分层协议栈&#xff1a;模块化解耦设计 现代跨链系统采用分层协议栈实现灵活扩展&#xff08;H2Cross架构&#xff09;&#xff1a; 适配层&#xf…...

2025盘古石杯决赛【手机取证】

前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来&#xff0c;实在找不到&#xff0c;希望有大佬教一下我。 还有就会议时间&#xff0c;我感觉不是图片时间&#xff0c;因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...

leetcodeSQL解题:3564. 季节性销售分析

leetcodeSQL解题&#xff1a;3564. 季节性销售分析 题目&#xff1a; 表&#xff1a;sales ---------------------- | Column Name | Type | ---------------------- | sale_id | int | | product_id | int | | sale_date | date | | quantity | int | | price | decimal | -…...

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...

docker 部署发现spring.profiles.active 问题

报错&#xff1a; org.springframework.boot.context.config.InvalidConfigDataPropertyException: Property spring.profiles.active imported from location class path resource [application-test.yml] is invalid in a profile specific resource [origin: class path re…...

Mobile ALOHA全身模仿学习

一、题目 Mobile ALOHA&#xff1a;通过低成本全身远程操作学习双手移动操作 传统模仿学习&#xff08;Imitation Learning&#xff09;缺点&#xff1a;聚焦与桌面操作&#xff0c;缺乏通用任务所需的移动性和灵活性 本论文优点&#xff1a;&#xff08;1&#xff09;在ALOHA…...

NPOI操作EXCEL文件 ——CAD C# 二次开发

缺点:dll.版本容易加载错误。CAD加载插件时&#xff0c;没有加载所有类库。插件运行过程中用到某个类库&#xff0c;会从CAD的安装目录找&#xff0c;找不到就报错了。 【方案2】让CAD在加载过程中把类库加载到内存 【方案3】是发现缺少了哪个库&#xff0c;就用插件程序加载进…...

MySQL 部分重点知识篇

一、数据库对象 1. 主键 定义 &#xff1a;主键是用于唯一标识表中每一行记录的字段或字段组合。它具有唯一性和非空性特点。 作用 &#xff1a;确保数据的完整性&#xff0c;便于数据的查询和管理。 示例 &#xff1a;在学生信息表中&#xff0c;学号可以作为主键&#xff…...