惠阳市网站建设,厦门网页设计招聘,淘宝客做网站可行么,山东建设厅证件查询网址目录 1、exec函数族的介绍2、exec相关函数 1、exec函数族的介绍 2、exec相关函数
#include unistd.h
int execl(const char *pathname, const char *arg0, ... /* (char *)0 */ );
/* - path 需要指定的执行的文件的路径或者名称#xff0c;相对路径or绝对路径- arg … 目录 1、exec函数族的介绍2、exec相关函数 1、exec函数族的介绍 2、exec相关函数
#include unistd.h
int execl(const char *pathname, const char *arg0, ... /* (char *)0 */ );
/* - path 需要指定的执行的文件的路径或者名称相对路径or绝对路径- arg 是执行可执行文件的参数列表- 第一个参数没有用- 最后一个参数为 NULLexecl(a.out, a.out,10, NULL);execl(/bin/ps, ps, NULL);
*/int execlp(const char *filename, const char *arg0, ... /*(char *)0 */ );
/*
- file 需要执行的可执行文件名
- execl(ps, ps, NULL);
- 这个函数可以从环境路径自行查找
*/int execv(const char *pathname, char *const argv[]); int execle(const char *pathname, const char *arg0, .../* (char *)0, char *const envp[] */ );int execve(const char *pathname, char *const argv[], char*const envp[]);int execvp(const char *filename, char *const argv[]);int fexecve(int fd, char *const argv[], char *const envp[]);l(list) 参数地址列表以空指针结尾 v(vector) 存有各参数地址的指针数组的地址 p(path) 按 PATH 环境变量指定的目录搜索可执行文件 e(environment) 存有环境变量字符串地址的指针数组的地址自行指定环境路径 前六个为标准c库中的函数最后一个为Linux中的系统函数。用的最多的就是前两个 下面对前两个函数做一个详细说明
execl
/* #include unistd.hint execl(const char *path, const char *arg, ...);- 参数- path:需要指定的执行的文件的路径或者名称a.out /home/nowcoder/a.out 推荐使用绝对路径./a.out hello world- arg:是执行可执行文件所需要的参数列表第一个参数一般没有什么作用为了方便一般写的是指定的可执行的程序的名称从第二个参数开始往后就是程序执行所需要的的参数列表。参数最后需要以NULL结束哨兵- 返回值只有当调用失败才会有返回值返回-1并且设置errno如果调用成功没有返回值。*/
#include unistd.h
#include stdio.hint main() {// 创建一个子进程在子进程中执行exec函数族中的函数pid_t pid fork();if(pid 0) {// 父进程printf(i am parent process, pid : %d\n,getpid());sleep(1);//如果没有sleep可以试一下打印结果}else if(pid 0) {// 子进程// execl(hello,hello,NULL);execl(/bin/ps, ps, aux, NULL);perror(execl);printf(i am child process, pid : %d\n, getpid());//如果execl执行成功那么这行代码是不会被执行的且下面的for循环也只会被父进程执行而不会被子进程执行。子进程只会执行可执行程序中的代码}for(int i 0; i 3; i) {printf(i %d, pid %d\n, i, getpid());}return 0;
}这段程序里通过execl通了两个例子一个是hello.c程序一个是ps指令
execlp
/* #include unistd.hint 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);int execve(const char *filename, char *const argv[], char *const envp[]);char * envp[] {/home/nowcoder, /home/bbb, /home/aaa};*/
#include unistd.h
#include stdio.hint 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;
}execlp与execl的不同之处就在于execlp的第一个参数只需要是可执行文件的参数名该函数会到环境变量中查找指定的可执行文件如果找到了就执行找不到就执行不成功。而execl的第一个参数是可执行文件的相对路径或者绝对路径