How to use execvp()
The first argument is the file you wish to execute, and the second argument is an array of null-terminated strings that represent the appropriate arguments to the file as specified in the man page.
For example:
char *cmd = "ls";char *argv[3];argv[0] = "ls";argv[1] = "-la";argv[2] = NULL;execvp(cmd, argv); //This will run "ls -la" as if it were a command
In cpp, you need to pay special attention to string types when using execvp
:
#include <iostream>#include <string>#include <cstring>#include <stdio.h>#include <unistd.h>using namespace std;const size_t MAX_ARGC = 15; // 1 command + # of argumentschar* argv[MAX_ARGC + 1]; // Needs +1 because of the null terminator at the end// c_str() converts string to const char*, strdup converts const char* to char*argv[0] = strdup(command.c_str());// start filling up the arguments after the first commandsize_t arg_i = 1;while (cin && arg_i < MAX_ARGC) { string arg; cin >> arg; if (arg.empty()) { argv[arg_i] = nullptr; break; } else { argv[arg_i] = strdup(arg.c_str()); } ++arg_i;}// Run the command with argumentsif (execvp(command.c_str(), argv) == -1) { // Print error if command not found cerr << "command '" << command << "' not found\n";}
Reference:execlp、execvp用法與範例