c libc execvp

¿Por qué el parámetro argv para execvp no es constante?



libc (2)

La especificación POSIX dice ( http://pubs.opengroup.org/onlinepubs/009604499/functions/exec.html ):

Las matrices argv[] y envp[] de punteros y las cadenas a las que apuntan esas matrices no se modificarán mediante una llamada a una de las funciones exec, excepto como consecuencia de la sustitución de la imagen del proceso.

Creo que la const perdida (o fuera de lugar) es simplemente una rareza histórica.

execvp se define así:

int execvp(const char *file, char *const argv[]);

Lo que impide el uso de código como este:

const char* argv[] = {"/bin/my", "command", "here", NULL}; execvp(argv[0], argv);

¿Fue esta una omisión accidental? ¿Es seguro const_cast alrededor de esto? ¿O es que algunas implementaciones de execvp realmente escriben en esa memoria?


Me encontré con esta misma situación. Debido a que execvp () tiene un char *const como segundo parámetro, eso significa que acepta un puntero constante a un carácter. Por lo tanto, si le pasa un puntero char, podrá convertir el puntero char en un puntero constante a un char. Así que, en lugar de declararlo

const char* argv[] = {"/bin/my", "command", "here", NULL};

tratar

char* argv[] = {"/bin/my", "command", "here", NULL};

y aceptará argv[] sin problema.