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

网站添加微信支付湖南省人民政府

网站添加微信支付,湖南省人民政府,石家庄的电商网站建设,rss wordpress本文目录 一、exec函数簇介绍二、exec函数簇 一、exec函数簇介绍 exec 函数族的作用是根据指定的文件名找到可执行文件,并用它来取代调用进程的内容,换句话说,就是在调用进程内部执行一个可执行文件。 exec函数族的函数执行成功后不会返回&…

在这里插入图片描述

本文目录

  • 一、exec函数簇介绍
  • 二、exec函数簇

一、exec函数簇介绍

exec 函数族的作用是根据指定的文件名找到可执行文件,并用它来取代调用进程的内容,换句话说,就是在调用进程内部执行一个可执行文件。

exec函数族的函数执行成功后不会返回,因为调用进程的实体,包括代码段,数据段和堆栈等都已经被新的内容(也就是新的进程信息会替换原进程的“用户区”的信息)取代,只留下进程ID等一些表面上的信息仍保持原样(比如PID、PPID、进程组号等这些在内核区的PCB中的信息),颇有些神似“三十六计"中的“金蝉脱壳”。看上去还是旧的躯壳,却已经注入了新的灵魂。只有调用失败了,它们才会返回-1,从原程序的调用点接着往下执行。

二、exec函数簇

int execl(const char *path,const char *arg,.../* (char *) NULL */);
int execlp(const char *file,const char *arg,.../* (char *) NULL */);
int execle(const char *path,const char *arg,.../* (char *) NULL ,char * const envp[] */;int execv(const char *path,char *const argv[]);
int execvp(const char *file ,char *const argv[]);
int execvp(const char *file,char *const argv[], char *const envp[]);//前面几个都是标准c库的函数,下面这个是linux的函数,一般来说就最上面两个用的最多。
int execve(const char *filename,char *const argv[],char *const envp[]); 

l:list参数地址列表,以空指针结尾。
v:vector存有各参数地址的指针数组的地址。
p:path按PATH环境变量指定的目录搜索可执行文件。
e:environment存有环境变量字符串地址的指针数组地址。

输入man 3 exec查看标准C库的文档解释:
在这里插入图片描述

首先在某个文件夹下创建hello.c文件,代码如下:

#include <stdio.h>int main() {    printf("hello, world\n");return 0;
}

然后在同级文件夹下创建execl.c文件,然后通过gcc exec.c -o exec进行编译。

/*#include<unistd.h>int execl(const char *path, const char *arg, ...);参数:-path:需要指定的执行的文件路径或者相对路径的名称比如a.out 或者/home/linux/a.out执行a.out的时候可以传递一些参数,所以后面都是可变参数-arg:是执行可执行文件需要的参数列表第一个参数一般没有什么作用,为了方便,一般写的是程序的名称、从第二个参数开始往后,就是程序执行所需要的参数。参数最后需要以NULL结束(哨兵)。返回值:只有出错的时候才会有返回值,返回-1,并且设置errno。如果调用成功,没有返回值。为什么没有返回值?因为用户区的内容已经被替换了。
*/#include <unistd.h>
#include <stdio.h>
#include<sys/types.h>int main() {// 创建一个子进程,在子进程中执行exec函数族中的函数pid_t pid = fork();if(pid > 0) {// 父进程printf("我是父进程, pid : %d\n",getpid());sleep(1);}else if(pid == 0) {// 子进程execl("hello","hello",NULL);//也可以试着跑一下系统的shell命令,也就是ps aux查看进程的命令,ps是可执行文件,aux是参数。//execl("/bin/ps", "ps", "aux", NULL);	}for(int i = 0; i < 3; i++) {printf("i = %d, pid = %d\n", i, getpid());}return 0;
}

运行./exec,会发现输出了hello,world! 并且只有父进程在输出for循环,子进程因为跳出实现另一个进程,不会再往下执行了。

在这里插入图片描述

下面的execlp函数则是到环境变量(输入env 即可查看环境变量,可以看到ps的环境变量是/usr/local/bin,所以下面的代码是可以成功找到ps并且执行的。)中去找可执行文件,所以不需要路径。

/*  #include <unistd.h>int execlp(const char *file, const char *arg, ... );- 会到环境变量中查找指定的可执行文件,如果找到了就执行,找不到就执行不成功。- 参数:- file:需要执行的可执行文件的文件名a.outps- arg:是执行可执行文件所需要的参数列表第一个参数一般没有什么作用,为了方便,一般写的是执行的程序的名称从第二个参数开始往后,就是程序执行所需要的的参数列表。参数最后需要以NULL结束(哨兵)- 返回值:只有当调用失败,才会有返回值,返回-1,并且设置errno如果调用成功,没有返回值。int execv(const char *path, char *const argv[]);argv是需要的参数的一个字符串数组char * argv[] = {"ps", "aux", NULL};execv("/bin/ps", argv);*/
#include <unistd.h>
#include <stdio.h>int main() {// 创建一个子进程,在子进程中执行exec函数族中的函数pid_t pid = fork();if(pid > 0) {// 父进程printf("i am parent process, pid : %d\n",getpid());sleep(1);}else if(pid == 0) {// 子进程execlp("ps", "ps", "aux", NULL);printf("i am child process, pid : %d\n", getpid());}for(int i = 0; i < 3; i++) {printf("i = %d, pid = %d\n", i, getpid());}return 0;
}
http://www.hengruixuexiao.com/news/51657.html

相关文章:

  • 郑州做网站建设公司排名互联网十大企业
  • 推广游戏怎么拉人最快最好的seo外包
  • 电子商务网站建设讯息优化大师软件下载
  • wordpress文字轮播北京seo服务销售
  • 怎么做商业服务网站长春最专业的seo公司
  • 公司刚做网站在那里找图片做万网域名查询
  • 自己做网站怎么选架构营销推广计划怎么写
  • 邯郸网站设计报价郑州网站优化渠道
  • b站必看3000部网站推广计划方法
  • 西安哪有学做淘宝网站营销策划公司的经营范围
  • 郑州网站制作设计快速刷排名的软件最好
  • 公司网站建设与管理的作用互联网营销专业
  • 珠宝公司网站模板永久免费个人网站申请注册
  • 北京优化靠谱的公司重庆seo建站
  • 网站开发是分为前端和后端吗网络营销就是seo正确吗
  • 动态网站用什么软件做南京广告宣传公司seo
  • 消防做ccc去那个网站自动app优化
  • 海淀高端网站建设百度一下百度官方网
  • 做通路富集分析的网站网站制作设计
  • 物流网站建设策划书郑州网络推广培训
  • 手机套 东莞网站建设百度指数关键词搜索趋势
  • 苏州能做网站沈阳seo搜索引擎
  • 做网站的怎么赚钱360竞价推广登录入口
  • 深圳网站优化费用正规排名网站推广公司
  • 企业网站申请永久十大基本营销方式
  • 如何建设淘客网站承接网络推广外包业务
  • 公司注册网站多少钱近期热点新闻事件50个
  • 网站更改文章标题seo搜索引擎优化关键词
  • 六安论坛网最新疫情消息搜索排名优化
  • 专做电子产品评测的网站站长之家seo工具