c++如何调用execvp
时间: 2023-06-23 14:54:41 浏览: 160
在C++中,调用execvp函数的方法与C语言基本相同,需要包含<unistd.h>头文件,并使用execvp函数的原型。以下是一个简单的示例程序,演示如何在C++中调用execvp函数:
```cpp
#include <iostream>
#include <unistd.h>
#include <sys/wait.h>
int main()
{
char* args[] = { "/bin/ls", "-l", NULL }; // 定义命令及参数
pid_t pid = fork(); // 创建子进程
if (pid == 0) {
// 在子进程中执行命令
if (execvp(args[0], args) == -1) {
perror("execvp failed");
return 1;
}
}
else if (pid > 0) {
// 在父进程中等待子进程结束
wait(NULL);
std::cout << "Command executed successfully" << std::endl;
}
else {
// 创建子进程失败
perror("fork failed");
return 1;
}
return 0;
}
```
在这个程序中,我们首先定义了要执行的命令及其参数,在本例中是/bin/ls -l。然后使用fork函数创建一个子进程,这个子进程将调用execvp函数来执行命令。
在子进程中,我们使用execvp函数来执行命令。如果execvp函数返回-1,则说明执行命令失败,程序将打印错误信息并退出。如果execvp函数成功执行,则子进程的代码和数据将被替换为命令的代码和数据,并开始执行命令。
在父进程中,我们使用wait函数等待子进程结束,以确保命令已经执行完成。最后,我们输出一条消息,表示命令已经成功执行。
需要注意的是,调用execvp函数后,程序的代码和数据将被替换为命令的代码和数据,因此execvp函数不会返回,如果execvp函数返回,则说明执行失败。因此,在调用execvp函数之前,通常需要在子进程中使用fork函数来创建一个新的进程,以避免在主程序中执行命令时出现意外的错误。
阅读全文