函数exec
来源:互联网 发布:2站域名www.tt69.com 编辑:程序博客网 时间:2024/06/05 02:54
int main(int argc , char *argv[])//测试调用函数{ const char *env_init[] = {"USER=unkown","PATH=mypath",NULL}; pid_t pid; if( (pid = fork()) < 0 ) err_sys("fork error"); else if(pid == 0)//这个很牛逼的样子哦,还可以这样玩,在子函数里面调用其他程序.并且次子进程所有东西都替换成了新程序,新程序从main开始执行 if(execle("/home/wangjun/DataStruct/apuebackup","apuebackup","argc 1", "argc 2" ,(char *)0 , env_init) < 0) err_sys("execle error");//这个函数给子程序指定了环境是什么,可以指明路径 if(waitpid(pid , NULL , 0) != pid) err_sys("wait error"); if( (pid = fork()) < 0 ) err_sys("fork error"); else if(pid == 0)//这种错误为什么会出现 if(execlp("apuebackup","apuebackup","argv1","argv2", (char *)0) < 0)//默认传递当前进程环境,但是可以传递参数进去,这就是可以理解为什么默认argv[i] = 0.为了别的程序调用,好区分传递参数或者传递环境变量.很牛逼啊 err_sys("execlp error");//注意此函数从PATH的路径里面去搜寻可执行程序,肯定搜寻不到,因为环境变量没有加路径嘛. //execlp error: No such file or directory环境变量里面有,为什么err错误哦. if(waitpid(pid , NULL , 0) != pid) err_sys("wait error");//execlp执行程序,并且这个函数是默认envrion环境变量 exit(0);}
- exec函数作用在于可以在子进程里面运行其他可执行程序。
execlp需要正确执行,需要在环境变量里面加入路径。 - 特别注意execlp第一个参数(新程序的argv[0]),可以设置为路径名文件名分量,也可以设置为任何字符串,因为某些shell会直接将这个变量自动设置成完全路径名。
- 如执行./myfunction argv1 argv2 那么argc=3,对应argv[0]=”./myfunction”;argv[1]=”argv1”;argv[2]=”argv2”; 默认还有一个argv[3] = 0;为什么需要这个argv[3]存储一个空字符串指针呢?为了标识传参列表结束。看到execlp有一个参数(char*)0,所以argv[3]用来存储这个,让被调用函数可以知道参数列表的结尾。
阅读全文
0 0
- exec函数
- exec 函数
- exec函数
- exec函数
- exec函数
- exec函数
- exec函数
- exec函数
- exec函数
- exec函数
- exec函数
- exec函数
- exec函数
- exec 函数
- exec函数
- exec函数
- exec函数
- exec函数
- 图的最小生成树---Prim算法
- 深入理解JVM总结-垃圾收集器与内存分配策略
- 2017/8/19 离线赛
- js实现内容查找和替换
- 关于servlet的一些总结
- 函数exec
- 如何在HTML中使用JavaScript
- IMDB 5000 Movie Dataset 数据分析学习记录
- HDU-6153---A Secret (扩展kmp)(2017ccpc网络赛)
- HDU 6153A Secret(kmp)
- 【hdu 2063 过山车 二分图】
- 《数据库SQL实战》查找employees表
- 日常工作积累
- poj 3259 Wormholes 【最短路之负权环的判断】