Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to pass a vector to execvp

Tags:

c++

vector

execvp

I want to pass a vector in as the second argument to execvp. Is it possible?

like image 644
neuromancer Avatar asked Oct 16 '25 15:10

neuromancer


1 Answers

Yes, it can be done pretty cleanly by taking advantage of the internal array that vectors use.

This will work, since the standard guarantees its elements are stored contiguously (see https://stackoverflow.com/a/2923290/383983)

#include <vector>

using namespace std;

int main(void) {
  vector<char *> commandVector;

  // do a push_back for the command, then each of the arguments
  commandVector.push_back("echo");
  commandVector.push_back("testing");
  commandVector.push_back("1");
  commandVector.push_back("2");
  commandVector.push_back("3");  

  // push NULL to the end of the vector (execvp expects NULL as last element)
  commandVector.push_back(NULL);

  // pass the vector's internal array to execvp
  char **command = &commandVector[0];

  int status = execvp(command[0], command);
  return 0;
}
like image 92
Dillon Kearns Avatar answered Oct 18 '25 05:10

Dillon Kearns



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!