exec族函数解析

本文介绍了Linux系统中用于在进程中启动新程序的exec函数族,包括execl、execv、execle、execve、execlp和execvp。这些函数会替换调用进程的内容,执行指定的可执行文件或脚本。文章通过代码示例展示了如何使用这些函数来执行不同的任务,如直接执行文件、从环境变量中查找文件以及传递环境变量等。
摘要由CSDN通过智能技术生成

一、fork函数是用于创建一个子进程,该子进程几乎是父进程的副本,而有时我们希望子进程去执行另外的程序,exec函数族就提供了一个在进程中启动另一个程序执行的方法。它可以根据指定的文件名或目录名找到可执行文件,并用它来取代原调用进程的数据段、代码段和堆栈段,在执行完之后,原调用进程的内容除了进程号外,其他全部被新程序的内容替换了。另外,这里的可执行文件既可以是二进制文件,也可以是Linux下任何可执行脚本文件。 

二、在Linux中使用exec函数族主要有以下两种情况

a. 当进程认为自己不能再为系统和用户做出任何贡献时,就可以调用任何exec 函数族让自己重生。
b. 如果一个进程想执行另一个程序,那么它就可以调用fork函数新建一个进程,然后调用任何一个exec函数使子进程重生。

三、exec函数族原型

[plain]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. int execl(const char *path, const char *arg, ...)  
  2. int execv(const char *path, char *const argv[])  
  3. int execle(const char *path, const char *arg, ..., char *const envp[])  
  4. int execve(const char *path, char *const argv[], char *const envp[])  
  5. int execlp(const char *file, const char *arg, ...)  
  6. int execvp(const char *file, char *const argv[])  
四、exec函数族的调用

1、execl 执行文件

返 回 值:成功:函数不返回 

                失败:函数返回-1

 #include <unistd.h> 

int main() 

{

      execl(“/bin/ls”,”ls”,”-al”,”/etc/passwd”,NULL);

      return 0; 

}

2、execlp 从path环境变量中查找文件执行

返 回 值:成功:函数不返回

                失败:函数返回-1

 #include <unistd.h> 

int main() 

{

      execlp(“s”,”ls”,”-al”,”/etc/passwd”,(char *)0);

      return 0; 

}

3、execve 执行文件

函数的参数:filename代表的文件路径             

                      argv利用数组指针传递给执行文件

                      envp传递给执行文件的新环境变量

返 回 值: 成功:函数不返回            

                  失败:函数返回-1


 #include <unistd.h> 

int main() 

{

     char * argv[] = {“ls”,”-al”,”/etc/passwd”,NULL};

     char * envp[] = {“PATH = /bin”,0};

     execve(“/bin/ls”,argv,envp); 

}

4、execvp 执行文件

返 回 值: 成功:函数不返回

           失败:函数返回-1 

 #include <unistd.h> 

int main() 

{

     char * argv[] = {“ls”,”-al”,”/etc/passwd”,0};

     execvp(“ls”,argv); 

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值