C语言 execve()函数使用方法

article/2025/8/12 16:15:58

1.君の名は

execve() – 叫做执行程序函数

就像Python中的os.system(cmd)这个函数,我们可以用这个函数来执行我们的shell脚本,单独的shell命令,或者是调用其他的程序,我们的execve()这个函数就和Python中的os.system函数类似,可以调用其他程序的执行,执行shell命令,,调用脚本等等功能。


2.定义

我们在使用这个函数的时候我们需要在程序中加入头文件

#include <unistd.h>

函数的原型:


int execve(const char *filename, char *const argv[], char *const envp[]); 

3.描述

int execve(const char *filename, char *const argv[], char *const envp[]); 

execve()执行程序由 filename决定。
filename必须是一个二进制的可执行文件,或者是一个脚本以#!格式开头的解释器参数参数。如果是后者,这个解释器必须是一个可执行的有效的路径名,但是不是脚本本身,它将调用解释器作为文件名。


argv是要调用的程序执行的参数序列,也就是我们要调用的程序需要传入的参数。

envp 同样也是参数序列,一般来说他是一种键值对的形式 key=value. 作为我们是新程序的环境。

注意,argv 和envp都必须以null指针结束。 这个参数向量和我们的环境变量都能够被我们的main函数调用,比如说我们可以定义为下面这个形式:

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

我们来实战一下这个函数要怎么使用。


4.调用

4.1执行shell命令


/*************************************************************************
    > File Name: caller.c
    > Author: Chicho
    > Created Time: 2016年12月06日 星期二 11:31:12************************************************************************/#include<stdio.h>
#include<unistd.h>int main(int arg, char **args)
{
    char *argv[]={"ls","-al","/home/chicho/result/", NULL};    char *envp[]={0,NULL}; //传递给执行文件新的环境变量数组    execve("/bin/ls",argv,envp);}

这个程序的功能就是使用ls 查看我们/home/chicho/result下面的文件夹的内容。
我们编译运行以下
得到的结果如下:

这里写图片描述

这个程序的功能相当于在/home/chicho/result下使用:

ls -al

4.2 调用其他程序

调用Python程序

首先程序要有可执行权限,我们需要用chmod修改一下。

比如说我们的Python程序叫做test.py

#!/usr/bin/env python
# coding=utf-8print "hello, world!\n"

这个时候我们用我们的C程序调用我们的python程序。执行。


#include<stdio.h>
#include<unistd.h>int main(int arg, char **args)
{char *argv[]={"python","/home/chicho/test/python/test.py",NULL};char *envp[]={0,NULL};execve("/usr/bin/env",argv,envp);
}

4.3 调用二进制可执行程序

/**  execve.c*/#include<unistd.h>
int main()
{char * argv[ ]={"./test","test_sample",(char *)0};char * envp[ ]={0};execve("./test",argv,envp);return 0;
}
/** test.c*/#include <stdio.h>
int main(int narg,char **args)
{if(narg != 2){printf("error,the input parameter must be one!\n");return -1;}char *str = args[1];printf("the input parameter is %s\n",str);return 0;
}

cc -g -o test test.c

生成test应用程序

然后

cc -g -o execve execve.c

生成execve应用程序

执行./execve即可调用test应用,输出

test_sample


Reference

http://www.tutorialspoint.com/unix_system_calls/execve.htm








这里写图片描述



这里写图片描述







http://chatgpt.dhexx.cn/article/OMbyU742.shtml

相关文章

SPSS-因子分析

因子分析 有可能用较少的综合指标分析存在于各变量中的各类信息&#xff0c;而各综合指标之间彼此是不相关的&#xff0c;代表各类信息的综合指标称为因子。定义&#xff1a;因子分析就是用少数几个因子来描述许多指标或因素之间的联系&#xff0c;以较少几个因子反映原资料的 …

spss进行主成分分析

什么是主成分分析 简而概之, 就是一组数据受太多因素影响, 选出几个能代表他们的因素,并进行线性组合得到一组比原维度小的因素组合, 作为新的因素集 用spss操作 随手拿出一组数据 1.数据统一标准化 因为我们得到的原始数据大小,类型不一, 一起分析会不准确, 所以将数据全部…

实用干货!因子分析超全步骤总结

因子分析是统计数据分析方法之一&#xff0c;因子分析包括探索性因子分析和验证性因子分析。本文主要讨论探索性因子分析。 一、研究背景 关于工作满意度有14个问题&#xff0c;调研得到215份问卷结果。希望通过因子分析&#xff0c;用少量因子反映14个题目的信息&#xff0c;…

NLP | 朴素贝叶斯法的学习与分类

朴素贝叶斯法的学习与分类 《统计学习方法》李航第四章 1、概述 书上对朴素贝叶斯的描述如下&#xff1a; 朴素贝叶斯法时基于贝叶斯定理与特征条件独立假设的分类方法。对于给定的训练数据集&#xff0c;首先基于特征条件独立假设学习输入/输出的联合概率分布&#xff1b;然…

标定相机参数-张正友方法

一、实验原理 1.计算外参 设三维世界坐标的点为M=[X,Y,Z,1]T,二维相机平面像素坐标为m=[u,v,1]T,所以标定用的棋盘格平面到图像平面的单应性关系为: sm=A[R,t]M 其中 不妨设棋盘格位于Z = 0,定义旋转矩阵R的第i列为 ri, 则有: 令H=[h1 h2 h3]=λA[r1 r2 t] 于是空间到图…

《统计学习方法》——朴素贝叶斯法

引言 朴素贝叶斯法(Naive Bayes)是基于贝叶斯定理与特征条件独立假设的分类方法。朴素贝叶斯法实现简单&#xff0c;学习与预测的效率都很高&#xff0c;是一种常用的方法。 这一章需要大量的概率论知识&#xff0c;忘记了的同学建议先参阅人工智能数学基础之概率论。 朴素贝…

数据挖掘十大算法之 naïve Bayes

朴素贝叶斯法是基于贝叶斯定理和特征条件独立假设的分类方法。朴素贝叶斯法实现简单&#xff0c;学习与预测的效率都很高&#xff0c;被广泛应用于文本分类、垃圾邮件过滤、自然语言处理等场景。下面我们来介绍贝叶斯定理&#xff0c;在介绍贝叶斯定理之前&#xff0c;先介绍下…

专题:深度神经网络基本问题的原理详细分析和推导

文章目录 **写在最前面****1 神经网络算法的直观了解****1.1 神经网络过程描述**&#xff1a;**1.2 神经网络相关的几个问题****1.2.1 表征假设和激活函数** **1.2.2 结构设计(Architecture Design)****1.2.3 代价函数(Cost Function)和优化目标(Optimization objective)****1.…

第四章 朴素贝叶斯法

文章目录 朴素贝叶斯法的学习与分类基本方法数据定义学习联合概率分布如何求出条件概率分布&#xff1f;如何分类&#xff1f; 后验概率最大化的含义 朴素贝叶斯的参数估计法极大似然估计学习分类算法贝叶斯估计 朴素贝叶斯法&#xff08;与贝叶斯估计是不同的概念&#xff09;…

GAN生成对抗式神经网络数学推导

由上面一篇文章我们已经知道了&#xff0c;如果我们从真实数据分布里面取n个样本&#xff0c;根据给定样本我们可以列出其出现概率的表达式&#xff0c;那么生成这N个样本数据的似然(likelihood)就是 l ( θ ) ∏ i 1 N p ( x i ∣ θ ) l ( \theta ) \prod _ { i 1 } ^ { …

《统计学习方法》学习笔记(三)之 朴素贝叶斯法

朴素贝叶斯法 总述 朴素贝叶斯法是基于贝叶斯定理与特征条件独立性假设的分类方法。对于给定的训练数据集&#xff0c;首先基于特征独立性假设学习输入/输出的联合概率分布&#xff1b;然后基于此模型&#xff0c;对给定的输入 x x x&#xff0c;利用贝叶斯定理求出后验概率最…

朴素贝叶斯(二)|极大似然估计+学习与分类算法+贝叶斯估计| 《统计学习方法》学习笔记(十六)

朴素贝叶斯法的参数估计 1. 极大似然估计 在朴素贝叶斯法中&#xff0c;学习意味着估计 P ( Y c k ) P(Yc_k) P(Yck​)和 P ( X ( j ) x ( j ) ∣ Y c k ) P(X^{(j)}x^{(j)}|Yc_k) P(X(j)x(j)∣Yck​)。可以应用极大似然估计法估计相应的概率。先验概率 P ( Y c k ) P(Yc…

一文看懂 “极大似然估计” 与 “最大后验估计” —— 最大后验估计篇

本文历次修订后全长 2万8000余字&#xff0c;受到 CSDN 博文字数限制&#xff0c;故切分两篇发布&#xff0c;所以现在是两文看懂了… 前篇介绍参数估计背景和极大似然估计&#xff1b;本篇介绍最大后验估计和两种方法对比请务必先看前文&#xff1a;一文看懂 “极大似然估计”…

【生成模型】极大似然估计,你必须掌握的概率模型

上一期为大家说明了什么是无监督生成模型。在无监督生成模型中&#xff0c;极大似然法一直扮演着非常核心的位置&#xff0c;我们必须对它有深刻的理解&#xff0c;本期小米粥将为大家讲一下极大似然法的那些事情。 作者&编辑 | 小米粥 1 一个小游戏&#xff1a;取球猜概率…

透彻理解机器学习中极大似然估计MLE的原理(附3D可视化代码)

文章目录 相关资料一、什么是概率&#xff0c;什么是似然二、极大似然估计 Maximum Likelihood Estimation (MLE) 的含义2.1 机器学习中的极大化似然函数2.2 极大似然估计和损失函数的关系VAE最大化似然函数推导出损失函数 三、代码可视化&#xff1a;极大似然估计3.1 似然函数…

C#RSA密码以及利用欧几里得算法实现两数互质的判断

最近做课程设计,想到以前看过RSA密码的相关内容&#xff0c;于是就想用刚学的C#做一个数字加密系统。RSA加密的流程如下&#xff1a; 来看一个“玩具式”的例子&#xff1a; (1)选取两个素数p2,q11,于是N22. (2)构造数,这是小于22且不含因数2和11的自然数的个数。 (3)选一个…

判断两数互质,java实现

数组下标i和j值互质时&#xff0c;a[i][j] true,反之false Write a program to create an n * n Boolean array. If I and j are coprime, a [i] [J] is true, otherwise it is false /** * When Array index Mutuality ,a[i][j] true,else is false * 数组i和j值互质时&…

两个质数互质是_两个数互质是什么意思 如何判断

互质数为数学中的一种概念&#xff0c;即两个或多个整数的公因数只有1的非零自然数。公因数只有1的两个非零自然数&#xff0c;叫做互质数。下面是小编整理的详细内容&#xff0c;一起来看看吧&#xff01; 两个数互质是什么意思 质数为数学中的一种概念&#xff0c;即两个或多…

char、wchar_t、ACHAR、WCHAR、TCHAR

最近用到上面几种不同的字符类型,下面贴上在网上收集到的资料。 1、char 单字节变量类型,最多表示256个字符。 2、wchar_t 宽字节变量类型,用于表示Unicode字符,它实际定义在<string.h>里:typedef unsigned short wchar_t。 定义宽字节类型方法如下: wchar_…

wchar* 转换成 string

wchar* 转换成 string 123 windows 类型转换问题 1 // Your wchar_t* wstring ws(L"Hello World"); // your new String std::string str(ws.begin(), ws.end()); // Show String std::cout << str << std::endl; 2 std::wstring wstr(L"Test&…