exec函数族的使用
exec用被执行的程序完全替换调用它的程序的影像。fork创建一个新的进程就产生了一个新的PID,
exec启动一个新程序,替换原有的进程,因此这个新的被exec执行的进程的PID不会改变,
和调用exec函数的进程一样。
int exec…装入和运行其它程序:
int execl( char *pathname,char *arg0,char *arg1,...,char *argn,NULL)
int execle( char *pathname,char *arg0,char *arg1,...,char *argn,NULL,char *envp[])
int execlp( char *pathname,char *arg0,char *arg1,...,NULL)
int execlpe(char *pathname,char *arg0,char *arg1,...,NULL,char *envp[])
int execv( char *pathname,char *argv[])
int execve( char *pathname,char *argv[],char *envp[])
int execvp( char *pathname,char *argv[])
int execvpe(char *pathname,char *argv[],char *envp[])
exec函数族装入并运行程序pathname,并将参数
arg0(arg1,arg2,argv[],envp[])传递给子程序,出错返回-1
在exec函数族中,后缀l、v、p、e添加到exec后,
所指定的函数将具有某种操作能力
有后缀 p时,函数可以利用DOS的PATH变量查找子程序文件。
假如你希望执行命令 /bin/cat /etc/passwd /etc/group,
l时,希望接收以逗号分隔的参数列表,列表以NULL指针作为结束标志
execl( "/bin/cat","/etc/passed","/etc/group",NULL);
v时,希望接收到一个以NULL结尾的字符串数组的指针
char* argv[] = {"/bin/cat","/etc/passed","/etc/group",NULL}
execv( "/bin/cat", argv );
e时,函数传递指定参数envp,允许改变子进程的环境,无后缀e时,子进程使用当前程序的环境。
envp也是一个以NULL结尾的字符串数组指针
execl(执行文件)
相关函数
fork,execle,execlp,execv,execve,execvp
表头文件
#include<unistd.h>
定义函数
int execl(const char * path,const char * arg,....);
函数说明
execl()用来执行参数path字符串所代表的文件路径,接下来的参数代表执行该文件时传递过去的argv(0)、argv[1]……,最后一个参数必须用空指针(NULL)作结束。
返回值
如果执行成功则函数不会返回,执行失败则直接返回-1,失败原因存于errno中。
范例
#include<unistd.h>
main()
{
execl(“/bin/ls”,”ls”,”-al”,”/etc/passwd”,(char * )0);
}
执行
/*执行/bin/ls -al /etc/passwd */
-rw-r--r-- 1 root root 705 Sep 3 13 :52 /etc/passwd
execlp(从PATH 环境变量中查找文件并执行)
相关函数
fork,execl,execle,execv,execve,execvp
表头文件
#include<unistd.h>
定义函数
int execlp(const char * file,const char * arg,……);
函数说明
execlp()会从PATH 环境变量所指的目录中查找符合参数file的文件名,找到后便执行该文件,然后将第二个以后的参数当做该文件的argv[0]、argv[1]……,最后一个参数必须用空指针(NULL)作结束。
返回值
如果执行成功则函数不会返回,执行失败则直接返回-1,失败原因存于errno 中。
错误代码
参考execve()。
范例
/* 执行ls -al /etc/passwd execlp()会依PATH 变量中的/bin找到/bin/ls */
#include<unistd.h>
main()
{
execlp(“ls”,”ls”,”-al”,”/etc/passwd”,(char *)0);
}
执行
-rw-r--r-- 1 root root 705 Sep 3 13 :52 /etc/passwd
execv(执行文件)
相关函数
fork,execl,execle,execlp,execve,execvp
表头文件
#include<unistd.h>
定义函数
int execv (const char * path, char * const argv[ ]);
函数说明
execv()用来执行参数path字符串所代表的文件路径,与execl()不同的地方在于execve()只需两个参数,第二个参数利用数组指针来传递给执行文件。
返回值
如果执行成功则函数不会返回,执行失败则直接返回-1,失败原因存于errno 中。
错误代码
请参考execve()。
范例
/* 执行/bin/ls -al /etc/passwd */
#include<unistd.h>
main()
{
char * argv[ ]={“ls”,”-al”,”/etc/passwd”,(char*) }};
execv(“/bin/ls”,argv);
}
执行
-rw-r--r-- 1 root root 705 Sep 3 13 :52 /etc/passwd
execve(执行文件)
相关函数
fork,execl,execle,execlp,execv,execvp
表头文件
#include<unistd.h>
定义函数
int execve(const char * filename,char * const argv[ ],char * const envp[ ]);
函数说明
execve()用来执行参数filename字符串所代表的文件路径,第二个参数系利用数组指针来传递给执行文件,
argv要传递给程序的完整参数列表,包括argv[0],它一般是执行程序的名字;最后一个参数则为传递给执行文件的新环境变量数组。
返回值
如果执行成功则函数不会返回,执行失败则直接返回-1,失败原因存于errno 中。
错误代码
EACCES
1. 欲执行的文件不具有用户可执行的权限。
2. 欲执行的文件所属的文件系统是以noexec 方式挂上。
3.欲执行的文件或script翻译器非一般文件。
EPERM
1.进程处于被追踪模式,执行者并不具有root权限,欲执行的文件具有SUID 或SGID 位。
2.欲执行的文件所属的文件系统是以nosuid方式挂上,欲执行的文件具有SUID 或SGID 位元,但执行者并不具有root权限
/****************************************************************************
**
** execve.c--Illustrate the usage of execve
**
*****************************************************************************/
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
int main( void )
{
char* args[] = { "/bin/ls", NULL };
if ( -1 == (execve("/bin/ls", args, NULL)) )
{
perror( "execve" );
exit( EXIT_FAILURE);
}
puts( "shouldn't get here" );
exit( EXIT_SUCCESS );
}
[root@localhost src]# gcc execve.c
[root@localhost src]# ./a.out
a.out child_fork.c execve.c fork.c getpid.c
相关文章:

全球首个突破200种语言互译的翻译引擎,百度翻译打破世界沟通壁垒
机器翻译作为人工智能关键技术之一,正日益成为企业智能化升级的重要应用场景。12月1日,百度大脑开放日举办了以“机器翻译 沟通全世界”为主题的专场活动。 IDC 中国副总裁兼首席分析师武连峰、百度 AI 技术生态部总经理刘倩、百度人工智能技术委员会主席…

倍福TwinCAT(贝福Beckhoff)基础教程5.1 TwinCAT-2 运行可执行文件
个人认为这条命令做的参数比较混乱,PATHSTR是指可执行文件路径最终文件名,DIRNAME是指可执行文件路径,最后COMNDLINE可有可无,是指带参数运行启动的文件 测试可以正常运行

Linux系统的大小端模式
大端模式所谓的大端模式,是指数据的低位(就是权值较小的后面那几位)保存在内存的高地址中,而数据的高位,保存在内存的低地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向…
CSDN插件限时内测,新用户抢永久免费去广告特权!
经过程序猿哥哥们和产品小姐姐马不停蹄的疯狂加班,CSDN 官方出品的PC浏览器插件–开发者助手 终于正式上线啦!一键万能操作,新标签页极简个性,让你的浏览器更酷更高效!还有超多实用彩蛋功能等你来解锁!现在…

你必须知道的.net学习总结
着几天在看《你必须知道的.net》,这次看书和以往不同,以前是把自己喜欢的章节看了。但是这次决定把一本书详细的看看。 在第一章第一节中主要讲的是“对象”,我想每一个程序员都对,“对象”有理解。 我来说说书中所说的对象吧。。 我只是把认…

Mybatis 基本配置, 面向接口
< 一 > 主配置文件 <?xml version"1.0" encoding"UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration><…

据说看完这21个故事的人,30岁前都成了亿万富翁。你是下一个吗?
1.甲去买烟,烟29元,但他没火柴,跟店员说:“顺便送一盒火柴吧。”店员没给。 乙去买烟,烟29元,他也没火柴,跟店员说:“便宜一毛吧。”最后,他用这一毛买一盒火柴。 这是…

助力视障人士,微软等公司捐赠首批AI有声内容
12月2日,微软与周迅AI语音红丹丹公益项目发起人鹿音苑文化传播公司,以及来自微软及各界的150名余志愿者,将创作的首批人工智能有声内容,包括鲁迅、老舍、萧红、朱自清等作家的一系列经典作品、红丹丹文化期刊,正式捐赠…

能和LoadRunner匹敌的VS2010/2012Web负载测试
VS自带的Web负载测试真的很大程度上能和专业的loadrunner媲美(只是Web方面),上个report图吧(如何实现,请往下拉): 看,能探测一堆的计数器(上面红色打叉的是代表超过了基线…

设置编码格式为utf8
response.setCharacterEncoding("UTF-8"); 在Servlet2.3中是不行的,至少要2.4版本才可以,如果低于2.4版本,可以用如下办法: response.setContentType("text/html;charsetUTF-8"); pageEncoding"UTF-8&qu…

Linux 命令集锦
linux下查看监听端口对应的进程 # lsof -i:9000 # lsof -Pnl M -i4# lsof -i | grep 9054 如果退格键变成了:"^h"。 终端连接unix删除退格键,按住CTL键同时按deleteLinux搜索 # find / -name "xxx.conf"查看linux是32位还是64位的命…

mysql (双主,互主)
Master-Master(双主) 1、测试环境 Master/Slave Master1/Slave1 IP 192.168.1.13 192.168.1.10 为了保持干净的环境:两边服务器 rm -rf /var/lib/mysql/* service mysqld re…
熬夜都要看完的 Python 干货!
结合我最近这些年的Python学习、开发经验,发现超90%的人在初学Python时都会遇到下面这些问题:没经验不知道怎么开始学,应用方向太多了根本不知道该怎么选择!各基础入门看似简单,但一到进阶部分就举步维艰,遇…
Linux下二进制文件安装MySQL
MySQL 下载地址:https://dev.mysql.com/downloads/mysql/ 并按如下方式选择来下载安装包。 1. 设置配置文件/etc/my.cnmore /etc/my.cnf [client] port 3306 socket /tmp/mysql.sockdefault-character-setutf8[mysqld] usermysql port 3306 server_id 1 socket/…

解决远程桌面无法连接问题
如果 出现的提示如下:---------------------------中断远程桌面连接---------------------------客户端无法建立跟远程计算机的连接。导致这个错误的可能的原因是:1) 远程计算机上的远程连接可能没有启用。2) 已超出远程计算机上的连接最大数。3) 建立连接时出现了一…
这些算法在印度农村医疗中发挥极大作用,未来还将发挥哪些作用?
作者 | Apoorva Mandavilli译者 | Jhonny,责编 | Carol来源 | Unitimes在结核病猖獗的印度农村等地方,用于扫描肺部X射线的 AI 技术可能有助于消除这种疾病之苦。印度农村马哈拉施特拉邦的 Chinchpada Mission 医院在世界上一些最偏远和最贫困的角落&…

四层和七层交换技术-loadbalance
1 四层交换技术简介 我们知道,二层交换机是根据第二层数据链路层的MAC地址和通过站表选择路由来完成端到端的数据交换的。三层交换机是直接根据第三层网络层IP地址来完成端到端的数据交换的。四 层交换机不仅可以完成端到端交换,还能根据端口主机的应用特…

sql server mvp 發糞塗牆
http://blog.csdn.net/dba_huangzj/article/details/38295753
几行代码完成动态图表绘制 | Python实战
作者 | 小F来源 | 法纳斯特头图 | CSDN下载自视觉中国关于动态条形图,小F以前推荐过「Bar Chart Race」这个库。三行代码就能实现动态条形图的绘制。有些同学在使用的时候,会出现一些错误。一个是加载文件报错,另一个是生成GIF的时候报错。这…

inline-block元素4px空白间隙的解决办法
为什么80%的码农都做不了架构师?>>> http://www.hujuntao.com/archives/inline-block-elements-the-4px-blank-gap-solution.html 转载于:https://my.oschina.net/i33/blog/124448

Ubuntn删除软件
删除dpkg -r 软件清除dpkg -P 软件也可以用sudo apt-get remove 软件 这种方式移除这种方式install的

对象Equals相等性比较的通用实现
对象Equals相等性比较的通用实现 最近编码的过程中,使用了对象本地内存缓存,缓存用了Dictionary<string,object>, ConcurrentDictionary<string,oject>,还可以是MemoryCache(底层基于Hashtable)。使用缓存,肯定要处理数据变化缓存…

Android:ViewPager为页卡内视图组件添加事件
在数据适配器PagerAdapter的初始化方法中添加按钮事件,这里是关键,首先判断当前的页卡编号。必须使用当前的view来获取按钮。 Overridepublic Object instantiateItem(View arg0, int arg1) {if (arg1 < 3) {((ViewPager) arg0).addView(mListViews.g…

解析C语言中的sizeof
一、sizeof的概念 sizeof是C语言的一种单目操作符,如C语言的其他操作符、--等。它并不是函数。sizeof操作符以字节形式给出了其操作数的存储大小。操作数可以是一个表达式或括在括号内的类型名。操作数的存储大小由操作数的类型决定。 二、sizeof的使用方法 1、用于…

开源大咖齐聚2020启智开发者大会,共探深度学习技术未来趋势
2020年12月2日,“OpenI/O 2020启智开发者大会”在北京国家会议中心召开。大会以“启智筑梦 开源先行”为主题,立足于国际国内开源大环境和发展趋势。开源领域顶尖专家学者和企业领军人物共聚一堂,探讨开源开放呈现出的新形势、新格局、新机…

linux中编译C语言程序
1.首先安装gcc编辑器 yum install gcc* -y 2.编写C语言程序 [roottest ~]# vim aa.c #include<stdio.h> int main( ) {int a;printf("请输入一个三位数的整数:");scanf("%d",&a);if(a>100&&a<1000)printf("百位是:…

typedef的四个用途和两大陷阱
typedef的四个用途和两个陷阱 -------------------…
升级版APDrawing,人脸照秒变线条肖像画,细节呈现惊人
作者 | 高卫华出品 | AI科技大本营随着深度学习的发展,GAN模型在图像风格转换的应用越来越多,其中不少都实现了很好的效果。此前,reddit上的一个技术博主AtreveteTeTe基于GAN模型混合将普通的人像照片卡通化,并通过First Order Mo…

error LNK1112: module machine type 'X86' conflicts with target machine type 'x64'
1 这个error是什么原因造成的 cmake默认选择的是x86,即32位的生成子。 2 怎么解决这个error 在cmake ..的时候,在后面加上“-G "Visual Studio 12 2013 Win64"”选项即可。 3 怎么在CMakeLists.txt中进行相应的设置来解决这个问题 这个还未知。…

Linux的epoll
在linux的网络编程中,很长的时间都在使用select来做事件触发。在linux新的内核中,有了一种替换它的机制,就是epoll。 相比于select,epoll最大的好处在于它不会随着监听fd数目的增长而降低效率。因为在内核中的select实现中&#x…