How to use execvp() How to use execvp() shell shell

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用法與範例