linux execve
时间: 2023-04-30 08:00:36 浏览: 100
Linux execve是一个系统调用,用于在当前进程中执行一个新的程序。它接受三个参数:第一个参数是要执行的程序的路径,第二个参数是一个字符串数组,包含要传递给新程序的命令行参数,第三个参数是一个字符串数组,包含新程序的环境变量。当execve被调用时,当前进程的代码和数据将被替换为新程序的代码和数据,从而实现了程序的执行。
相关问题
execve 相对路径
引用和引用[2]提到了sys_execve函数可以接受绝对路径或相对路径。而相对路径是相对于当前工作目录而言的路径。在Linux系统中,每个进程都有一个当前工作目录,可以使用getcwd()函数获取当前工作目录。如果在调用sys_execve时传递了相对路径,则会将相对路径解释为相对于当前工作目录的路径。因此,如果要使用相对路径调用sys_execve函数,需要确保当前工作目录已经设置为正确的目录。
引用提到了在execve函数中,会调用getname()函数来获取输入路径。getname()函数会将输入路径转换为内核中的路径表示方式,并返回一个指向内核中路径表示的结构体的指针。在这个过程中,相对路径会被解释为相对于当前工作目录的路径。
linux exec指令
`exec` 是一个 Linux 系统调用,用于启动一个新程序取代当前进程。它有多个变体,其中最常用的是 `execve` 函数,它可以使用指定的参数和环境变量启动一个新程序。
`execve` 的语法如下:
```c
int execve(const char *filename, char *const argv[], char *const envp[]);
```
其中:
- `filename`:要执行的程序的路径。
- `argv`:一个以 NULL 结尾的字符串数组,表示传递给新程序的命令行参数。
- `envp`:一个以 NULL 结尾的字符串数组,表示传递给新程序的环境变量。
当 `execve` 函数成功执行时,它不会返回,而是将当前进程替换为新程序。如果发生错误,则返回 -1。