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

手机做车载mp3下载网站系统优化大师

手机做车载mp3下载网站,系统优化大师,网站网络推广运营,何鹏seo本文目录 一、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.hkea.cn/news/953971/

相关文章:

  • 自己做的网站如何放进服务器今天今日头条新闻
  • 男装网站的网站建设背景惠州seo按天计费
  • 如何快速提高网站排名互联网项目推广
  • icp备案网站名称更改成都网站设计
  • 企业网站建设需求分析seo排名资源
  • python基础教程雪峰东莞搜索seo网站关键词优化
  • b2b网站开发供应商小程序开发教程全集免费
  • 用自己的手机做网站外链网站是什么
  • 市场调研公司介绍网站推广优化公司
  • 玉溪人民政府网站建设现状新网站seo
  • 湖南餐饮网站建设2023北京封控了
  • 重庆网站设计人员外贸网站搭建推广
  • 局域网内的网站建设西安网站建设公司排名
  • 普通网站报价多少中南建设集团有限公司
  • 蚌埠做网站哪家好全网营销国际系统
  • 沈阳市网站制作谷歌香港google搜索引擎入口
  • 做美食网站的背景高端网站建设制作
  • 文件什么上传到wordpress泉州seo技术
  • 网站地址地图怎么做网页制作的软件有哪些
  • 如何用万网建设网站口碑营销策划方案
  • 做网站的基础架构东莞seo建站公司
  • 嘉兴做网站的哪家好龙岗网站制作
  • 论坛做网站好吗百度官方网页
  • 微信开发者工具获取系统日期seo优化一般包括
  • 怎么用文本做网站百度排行榜风云榜
  • 未来网站开发需求多搜索网站有哪几个
  • 网站建设 成都郑州高端网站制作
  • 快站怎么做淘客网站深圳关键词
  • 做网站时如何去掉网站横条小红书软文案例
  • 图虫南宁百度快速排名优化