当前位置: 首页 > news >正文

自适应网站方案淮南服装网站建设费用

自适应网站方案,淮南服装网站建设费用,网页超链接怎么做步骤,唯一做性视频的网站一、替换原理 用fork创建子进程后执行的是和父进程相同的程序(但有可能执行不同的代码分支),子进程往往要调用一种exec函数以执行另一个程序。当进程调用一种exec函数时,该进程的用户空间代码和数据完全被新程序替换,从新程序的启动例程开始执…

一、替换原理

        用fork创建子进程后执行的是和父进程相同的程序(但有可能执行不同的代码分支),子进程往往要调用一种exec函数以执行另一个程序。当进程调用一种exec函数时,该进程的用户空间代码和数据完全被新程序替换,从新程序的启动例程开始执行。调用exec并不创建新进程,所以调用exec前后该进程的id并未改变。程序替换所做的本质工作就是将代码和数据加载到内存。

        替换系统命令时命令行怎么写,参数就怎么传,参数以NULL结尾程序替换一旦成功,exec*后序的代码不再执行。因为原程序的数据和代码被替换掉了。exec*程序替换接口只有失败返回值,没有成功返回值。

二、子进程进行程序替换

        通过子进程进行程序替换可以让子进程帮我们去做一部分工作,而且子进程发生程序替换不会影响父进程执行,因为替换时代码和数据会发生写时拷贝。

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>int main()
{pid_t id = fork();if(id == 0){execl("/usr/bin/ls", "ls", "-l", NULL);exit(0);}pid_t rid = waitpid(id, NULL, 0);printf("wait success!\n");return 0;
}

2.1、让子进程执行我自己的程序

        我自己写了一个C++程序,向替换子进程帮我跑一下:

//C++程序
#include <iostream>
using namespace std;int main()
{cout << "Hello Linux!" << endl;cout << "Hello Linux!" << endl;cout << "Hello Linux!" << endl;cout << "Hello Linux!" << endl;return 0;
}

 C程序:

//让子进程执行我自己写的程序
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>int main()
{pid_t id = fork();if(id == 0){execl("./mytest", "./mytest", NULL);exit(0);}pid_t rid= waitpid(id, NULL, 0);if(rid > 0)printf("wait success!\n");return 0;
}

        执行结果如下,证明了我们不仅仅可以替换子进程执行系统程序,还可以替换子进程执行我们的程序。 无论是什么语言,只要能在Linux系统下跑,都可以用exec系列的接口进行程序替换,exec系列的接口只认二进制代码和数据。

三、各种exec接口

 其它六个接口在底层都封装了execve系统调用接口。

3.1、execlp 

        exec接口中,l意为list,表示参数列表,v意为vector,就指的是数组名字中带p的这个p指的是PATH,也就是说你不用告诉系统,程序在哪里,只要告诉我名字就行,系统会自动到你这个进程的PATH环境变量中所保存的路径中寻找。execlp只有第一个参数和execl不同,其余参数都相同。

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>int main()
{pid_t id = fork();if(id == 0){execlp("ls", "ls", "-l", NULL);exit(0);}pid_t rid = waitpid(id, NULL, 0);printf("wait success!\n");return 0;
}

3.2、execv/execvp

        execv的用法与execl的用法大致相同,只不过将execl后面的可变参数列表换成一个指针数组。execvp也只是将execv前面的路径换成程序名而已。不过这里要强调的是:不要忘了路径最前面的那一个斜杠,还有数组的结束标志是NULL,一定要在数组的最后加上NULL

#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>int main()
{pid_t id = fork();if(id == 0){char* argv[] = {"ls", "-l", "-a", NULL};//execvp("ls", argv);execv("/usr/bin/ls", argv);exit(0);}pid_t rid= waitpid(id, NULL, 0);if(rid > 0)printf("wait success!\n");return 0;
}

3.3、execle/execvpe/execve

        程序替换不会替换环境变量数据可以通过地址空间继承的方法,让子进程拿到父进程的所有环境变量。如果我们想传递全新的环境变量表给子进程,就要使用带e的程序替换接口。

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>int main()
{pid_t id = fork();if(id == 0){char* env[] ={"aaa=bbbbbbbbbbbbbbbb", NULL};execle("./mytest", "./mytest",NULL,  env);exit(0);}pid_t rid= waitpid(id, NULL, 0);if(rid > 0)printf("wait success!\n");return 0;
}

http://www.yayakq.cn/news/166203/

相关文章:

  • 成品网站源码1688免费推荐tplink域名申请
  • 医院的网站关键词定位一般是什么wordpress 图片调用api接口
  • 阿里巴巴网站首页怎么制作个人简历表
  • 家政服务 技术支持 东莞网站建设湘潭网站优化公司
  • 公司建网站流程织梦网站主页
  • 遵义做网站的网络公司男女做污视频在线观看网站
  • 公司网站推广运营移动互联网开发课程
  • 网站模板广告去除网站开发岗位职责任职责格
  • 微信网站背景图片做一个众筹网站多少钱
  • 天津百度整站优化服务网页制作培训前景
  • 百度收录新网站个人怎么申请营业执照
  • 网站搭建实训总结长沙网站推广公司排名
  • 网站建设前期情况说明wordpress 嵌入pdf
  • 网页制作与网站建设宝典 第2版建盏是什么意思
  • 如何制作自己的网站在里面卖东西网站建设 网页制作
  • 本地怎么做网站服务器吗网站说明页命名
  • 手机wap网站开发的cms系统wordpress地址设置
  • 怎么制作网站导航页延庆网站制作
  • 贵州省城乡和住房建设厅网站重庆做网站外包公司
  • 高埗仿做网站网络规划设计师教程第二版下载
  • 网站建设费是否应当入无形资产做好公司网站
  • 个人网站的设计与实现千万别学建筑工程技术
  • 备案期间网站怎么关闭dw网页制作教程宣传
  • 台州网站设计开发建设银行网站证书
  • 宁波网站优化方案网络规划设计师教程第二版
  • 如何提升网站seo排名广东的互联网公司有哪些
  • 什么网站可以找人做系统网站建设的软硬件平台
  • 网站右侧广告网址的二级域名
  • dedecms 做电商网站网站小图标怎么做的
  • 门户网站的意义电商平台网址