Linux exec 函数族

Linux的exec函数族包括execl、execv、execle、execvp和execve,用于在同一个进程中替换当前映像执行新程序。这些函数接受不同形式的参数,如文件路径、命令行参数和环境变量。当成功执行时,函数不会返回,而是直接启动新程序。如果失败,它们返回负值并可通过perror获取错误信息。
摘要由CSDN通过智能技术生成

比较常用的是

execlp函数:使用PATH环境变量名加载程序

execl函数:使用路径+程序名加载程序

在Linux中,exec函数族是一组用于执行新程序的函数。它们可以用于替换当前进程的映像,从而在同一个进程中执行不同的程序。以下是Linux中常见的exec函数族的一些函数:

1.int execl(const char *path, const char *arg, ...) 这个函数用于执行一个指定的可执行文件。它接受一个文件路径作为参数,后面跟着可选的命令行参数,最后以NULL作为结束符。该函数会用指定的可执行文件替换当前进程的映像,并开始执行新程序。例如:

execl("/bin/ls", "ls", "-l", NULL);

2.int execv(const char *path, char *const argv[]) 这个函数与execl类似,但它接受一个参数数组来传递命令行参数。参数数组中的第一个元素通常是可执行文件的路径,接下来是命令行参数,以NULL作为结束符。例如: 

char *args[] = {"ls", "-l", NULL};
execv("/bin/ls", args);

3.int execle(const char *path, const char *arg, ..., char *const envp[]) 这个函数与execl类似,但它还接受一个环境变量数组作为参数。环境变量数组用于传递自定义的环境变量给新程序。例如:

char *env[] = {"HOME=/home/user", "PATH=/usr/bin", NULL};
execle("/bin/ls", "ls", "-l", NULL, env);

4.int execvp(const char *file, char *const argv[]) 这个函数与execv类似,但它会在系统的PATH环境变量中搜索可执行文件的路径。它可以使用不带路径的可执行文件名来执行程序。例如:

char *args[] = {"ls", "-l", NULL};
execvp("ls", args);

 这些函数族中的每个函数在成功执行时不会返回,而是直接将控制权转移到新程序。如果执行失败,它们会返回一个负值,并且可以使用perror函数来获取详细的错误信息。

5.execve:

#include <unistd.h>

int execve(const char *pathname, char *const argv[], char *const envp[]);
  • pathname是要执行的可执行程序的路径。
  • argv是一个以NULL结尾的字符串数组,表示要传递给新程序的命令行参数。
  • envp是一个以NULL结尾的字符串数组,表示要传递给新程序的环境变量。
#include <unistd.h>

int main() {
    char *argv[] = { "/path/to/executable", "arg1", "arg2", NULL };
    char *envp[] = { "VAR1=value1", "VAR2=value2", NULL };
    
    execve("/path/to/executable", argv, envp);
    
    // 如果execve执行成功,下面的代码将不会被执行
    perror("execve"); // 打印错误信息
    return -1;
}

6.execlp:

#include <unistd.h>

int execlp(const char *filename, const char *arg0, ... /* (char  *) NULL */);
  • filename是要执行的可执行程序的名称。在execlp中,会在$PATH环境变量指定的路径中搜索该程序。
  • arg0以及后面的参数是要传递给新程序的命令行参数,最后一个参数必须是NULL
#include <unistd.h>

int main() {
    execlp("executable", "executable", "arg1", "arg2", NULL);
    
    // 如果execlp执行成功,下面的代码将不会被执行
    perror("execlp"); // 打印错误信息
    return -1;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值