函数族:一系列功能相同或相似的函数
p是代表到环境变量中找,e表示给程序新的环境变量。
前六个是标准c库函数,最后一个是linux库函数
常用execl和execlp
1.execl函数
子进程的代码被替换掉
/*
#include <unistd.h>
extern char **environ;
int execl(const char *path, const char *arg, ...);
-参数:
-path:需要指定的执行的文件的路径或名称
相对路径:a.out 绝对路径:/hone/ethan/a.out 推荐使用绝对路径
-arg:是执行可执行文件苏需要的参数列表
第一个参数一般没有什么作用为了方便,一般写的是执行的程序的名称
从第二个参数开始往后,就是程序执行所需要的参数列表
参数最后需要以NULL结束(哨兵)
类似./a.out hello
-返回值:
只有当调用失败,才会有返回值,返回-1,并且设置errno
*/
#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){
//子进程
//execl("/home/ethan/Linux/lesson19/hello","hello",NULL);
//shell命令执行
execl("/bin/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;
}
2.execlp函数:
/*
#include <unistd.h>
extern char **environ;
int execlp(const char *file, const char *arg, ...);
-会到环境变量中查找指定的可执行文件,如果找到了就执行,找不到就执行不成功
-参数:
-file:需要执行的可执行的文件名
a.out
ps
-arg:是执行可执行文件苏需要的参数列表
第一个参数一般没有什么作用为了方便,一般写的是执行的程序的名称
从第二个参数开始往后,就是程序执行所需要的参数列表
参数最后需要以NULL结束(哨兵)
类似./a.out hello
-返回值:
只有当调用失败,才会有返回值,返回-1,并且设置errno
*/
#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){
//shell命令执行
execlp("ps","ps","aux",NULL);
//如果是hello自己写的代码由于环境变量中没有会出错
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;
}