linux中execve函数的用法
2024-08-26 01:52:19
在父进程中fork一个子进程,在子进程中调用exec函数启动新的程序。exec函数一共有六个,其中execve为内核级系统调用,其他(execl,execle,execlp,execv,execvp)都是调用execve的库函数。
#include<unistd.h>
函数定义 int execve(const char *filename, char *const argv[ ], char *const envp[ ]);
返回值 函数执行成功时没有返回值,执行失败时的返回值为-1.
函数说明 execve()用来执行参数filename字符串所代表的文件路径,第二个参数是利用数组指针来传递给执行文件,并且需要以空指针(NULL)结束,最后一个参数则为传递给执行文件的新环境变量数组。
- #include<unistd.h>
- main()
- {
- char *argv[ ]={"ls", "-al", "/etc/passwd", NULL};
- char *envp[ ]={"PATH=/bin", NULL}
- execve("/bin/ls", argv, envp);
- }
运行结果为:-rw-r--r-- 1 root root 1659 Feb 27 20:13 /etc/passwd
这与在bin目录下执行 ls -al /etc/passwd 所得到的结果是一样的。
fork是分身,execve是变身。
exec系列的系统调用是把当前程序替换成要执行的程序,而fork用来产生一个和当前进程一样的进程(虽然通常执行不同的代码流)。通常运行另一个程序,而同时保留原程序运行的方法是,fork+exec。
看看手册里面的例子就知道怎么用了。
exec系列的系统调用已经是变成别的程序了,已经和本程序无关了
最新文章
- call
- 单源最短路径算法——Dijkstra算法
- php生成静态文件
- poj2763 树链剖分(线段树)
- Tomcat 部署:工程下 META-INF 目录下的 Context.xml
- 简单模拟Spring管理Bean对象
- tyvj 1056 能量项链 区间dp (很神)
- linux_软件安装策略和升级策略
- monkey日志分析
- 利用websocket实现微信二维码码扫码支付
- 【CF280D】 k-Maximum Subsequence Sum ,线段树模拟费用流
- 学习Spring Boot:(一)入门
- 自定义simple_tag和filter在html中渲染出来的联系和区别
- RuntimeException: Type ";nmethodBucket*";, referenced in VMStructs::localHotSpotVMStructs in the remot
- CSS 表格实例
- 【LG1368】工艺
- OneZero第四周第五次站立会议(2016.4.15)
- java从文件中读取数据然后插入到数据库表中
- 准确率,召回率,F值,机器学习分类问题的评价指标
- 2018.09.16 bzoj1176: [Balkan2007]Mokia(cdq分治)
热门文章
- Educational Codeforces Round 16 E. Generate a String dp
- 未能加载文件或程序集“log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=1b44e1d426115821”或它的某一个依赖项。系统找不到指定的文件。
- C#高级编程 (第六版) 学习 第一章:.Net体系结构
- C++ Primer Plus学习:第八章
- java程序连接MySQL数据库
- Microsoft Orleans 之简介
- 操作系统cmd
- web_config配置
- phpisset()和empty()函数区别
- 第162天:canvas中Konva库的使用方法