execvp is defined thus:
int execvp(const char *file, char *const argv[]);
Which precludes code such as this from being used:
const char* argv[] = {"/bin/my", "command", "here", NULL};
execvp(argv[0], argv);
Was this an accidental omission? Is it safe to const_cast around this? Or do some execvp implementations actually scribble on that memory?
The POSIX spec says (http://pubs.opengroup.org/onlinepubs/009604499/functions/exec.html):
The
argv[]
andenvp[]
arrays of pointers and the strings to which those arrays point shall not be modified by a call to one of the exec functions, except as a consequence of replacing the process image.
I think the missing (or misplaced) const
is simply an historical oddity.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With