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















C语言 execve()函数使用方法相关推荐

  1. c语言memset函数用法,C语言memset函数使用方法详解

    C语言memset函数使用方法详解 一.函数原形   void *  memset(void*s, int ch,size_t n) 二.函数作用  将以s内存地址为首的连续n个字节的内容置成ch,一 ...

  2. c语言memset函数作用,C语言memset函数使用方法详解

    C语言memset函数使用方法详解 一.函数原形   void *  memset(void*s,int ch,size_t n) 二.函数作用  将以s内存地址为首的连续n个字节的内容置成ch,一般 ...

  3. 在Windows中测试c语言单个函数运行时间方法

    在做单片机项目开发的过程中,在特殊应用中对代码执行的时间有着严格的要求,那么如何准确的测试出每个函数的的运行速度是多快呢?通常用单片机测试的方法就是通过示波器观察. 比如现在要测试使用二分查找法,在数 ...

  4. C语言qsort函数使用方法大全

    文章目录 一.qsort函数简介 二.qsort函数常用实例 1.比较整型数组 2.比较char数组 3.比较double数组 4.比较字符串 4.1按首字母排序 4.2按长度排序 4,3按字典顺序 ...

  5. c语言调用函数的方法案例,C语言经典例题100例——C语言练习实例34解答(函数调用)...

    题目:练习函数调用. 程序分析:无. 程序源代码: // 百宝箱工作室 官方网址 http://www.baibaox.com // 百宝箱工作室业务介绍 http://www.baibaox.com ...

  6. Go语言教程第三集 集合、函数和方法

    04 集合类型:如何正确使用 array.lice 和 map? 上节课的思考题是练习使用 for 循环中的 continue,通过上节课的学习,你已经了解 continue 是跳出本次循环的意思,现 ...

  7. 在c语言中log函数的作用,C++_在C语言中使用对数函数的方法,C语言log()函数:返回以e为底的 - phpStudy...

    在C语言中使用对数函数的方法 C语言log()函数:返回以e为底的对数值头文件: #include log() 函数返回以 e 为底的对数值,其原型为: double log (double x); ...

  8. c语言实现函数给主函数中的指针赋值的方法

    //利用二维指针.自从学了c之后,还没怎么用过二维指针,这么算是记住了 /* c语言实现函数给主函数中的指针赋值的方法*/#include<stdio.h>void f (int **p) ...

  9. c语言goord函数,park、unpark、ord 函数使用方法(转)

    park,unpark,ord这3个函数,在我们工作中,用到它们的估计不多. 我在最近一个工作中,因为通讯需要用到二进制流,然后接口用php接收.当时在处理时候,查阅不少资料.因为它们使用确实比较少, ...

  10. Java Lambda(语言篇——lambda,方法引用,目标类型,默认方法,函数接口,变量捕获)

    深入理解Java 8 Lambda(语言篇--lambda,方法引用,目标类型和默认方法) 原文链接:http://zh.lucida.me/blog/java-8-lambdas-insideout ...

最新文章

  1. ionic+angularJS+iOS混合开发app的学习资料介绍和基本步骤(干货)
  2. java+卡有型号吗,第一次写java代码,就卡主了,真是惨,有木有大腿来帮忙调试一下...
  3. ngx_lua与go高并发性能对比
  4. Spring Cloud-微服务架构集大成者
  5. Infragistics NetAdvantage
  6. js 匿名函数_编写高质量箭头函数的5个最佳做法
  7. LINQ to SQL之Step by Step及新手问题小结
  8. 图像处理三:图像变形forward warping和inverse warping
  9. C语言程序——如何是使用TurboC2编程调试
  10. 操作无法完成因为其中的文件夹或文件已在另一个程序中打开
  11. “不死鸟”号历险记---和扫雷过不去篇(无厘头版)
  12. Windows下自动同步工具SyncToy的使用与定时执行部署
  13. perf Examples
  14. DP之Warshall算法和Floyd算法
  15. 每日一佳——Computational Rationalization: The Inverse Equilibrium Problem(Kevin Waugh et al. ,ICML ,2011)
  16. TeamViewer使用心得
  17. SpringCloudAlibaba之gateway网关
  18. 医院HIS系统运维工作见闻
  19. 李有志——预谋着向生活发起冲锋...
  20. Debug与Release版本的区别

热门文章

  1. 牛客练习赛41:球的体积并【球缺】
  2. 计算机教师继续教育心得,教师继续教育个人总结(通用5篇)
  3. 一分钟了解业务流程图与功能流程图的区别
  4. qplot函数添加回归曲线R方方差分析表
  5. LCP 19. 秋叶收藏集(C++)---动态规划解题
  6. 511遇见易语言文本处理寻找文本
  7. ysoserial exploit/JRMPListener原理剖析
  8. 服务器2008系统提权工具,Windows下提权辅助工具Windows-Exploit-Suggester
  9. mysql挂马_虚拟主机/数据库中挂马清理方法
  10. 网页如何设置背景图片