execv(path.c_str(), (char*const*)argv)函数内怎么获取传入的 (char*const*)argv参数
时间: 2023-12-30 14:02:55 浏览: 139
根据引用[1]中的代码,可以看出在函数`new_execv`中,参数`(char*const*)argv`被转换为了`char **_argv`。然后通过循环遍历`_argv`指针数组,可以获取传入的参数值。
以下是一个示例代码,演示了如何获取传入的`(char*const*)argv`参数:
```cpp
inline int new_execv(const char *pathname, char *const argv[]) {
char **_argv = (char **) argv;
int argv_index = 0;
while (*_argv != NULL) {
LOGD("execv param:[%d] ==> %s", argv_index, *_argv);
argv_index++;
_argv++;
}
// 其他操作...
}
```
通过以上代码,可以逐个打印出传入的参数值。
相关问题
execv
`execv` 是一个系统调用函数,用于在当前进程中运行另一个可执行文件。该函数会把当前进程的程序替换为新的可执行文件,新的可执行文件会接管当前进程的运行,而原来的程序就会被完全替换掉,不再运行。
`execv` 函数的原型如下:
```c
#include <unistd.h>
int execv(const char *path, char *const argv[]);
```
其中,`path` 参数是需要运行的可执行文件的路径,`argv` 参数是可执行文件的命令行参数列表。
`execv` 函数会根据 `path` 参数指定的可执行文件路径查找该文件,并将 `argv` 参数中的参数列表传递给该可执行文件。如果成功运行了新的可执行文件,则该函数不会返回;如果运行失败,则会返回一个值为 -1 的错误码。在新的可执行文件中,可以使用 `getpid()` 函数获取当前进程的进程号,并使用 `getppid()` 函数获取当前进程的父进程号。
3. 总结Linux中exec函数族的具体使用方法
在Linux中,exec函数族是用于执行一个新程序的函数族。这个函数族包括以下几个函数:
1. execl():执行一个指定的程序,它使用一个可变参数列表来传递程序名和参数列表。这个函数的原型如下:
```c
int execl(const char *path, const char *arg, ...);
```
2. execlp():与execl()函数相似,但它会在$PATH环境变量指定的路径中查找要执行的程序。这个函数的原型如下:
```c
int execlp(const char *file, const char *arg, ...);
```
3. execle():与execl()函数相似,但它还可以指定程序执行时的环境变量。这个函数的原型如下:
```c
int execle(const char *path, const char *arg, ..., char *const envp[]);
```
4. execv():与execl()函数相似,但它使用一个字符指针数组来传递参数列表。这个函数的原型如下:
```c
int execv(const char *path, char *const argv[]);
```
5. execvp():与execv()函数相似,但它会在$PATH环境变量指定的路径中查找要执行的程序。这个函数的原型如下:
```c
int execvp(const char *file, char *const argv[]);
```
这些函数中,每个函数的第一个参数都是要执行的程序的路径或文件名。如果路径是一个相对路径,那么它是相对于当前工作目录的。其他参数则是程序的命令行参数。
这些exec函数族的使用方法都差不多,一般来说,它们会替换当前进程,也就是说,调用它们后,原来的程序就被新的程序所替代,而且新的程序从main()函数开始执行,不会返回到原来的程序。因此,在使用这些函数时,一定要注意保存当前进程的状态。
阅读全文