¿Por qué no funciona mi contenedor alrededor de setenv ()?
Pregunta
Tengo el siguiente método, y establece correctamente el valor ret en 0 (lo que indica éxito en setenv), pero cuando verifico si esta variable de entorno está realmente establecida, está ausente. ¿Por qué estaría pasando esto?
void Class::mysetenv(char* a, char* b)
{
if(a==0 || b==0)
return;
int ret = setenv(strdup(a), strdup(b), 1);
printf("ret: %d %s %s\n", ret, a, b);
}
Solución
Su función tiene fugas. La página de manual de setenv
dice:
Esta función hace copias de las cadenas señaladas por nombre y valor
Para que no tenga que copiarlos usted mismo antes de pasárselos.
¿Ejecutas tu programa así desde dentro del shell?
./a.out FOO 42
Bueno, entonces la variable de entorno se establecerá para el proceso así ejecutado (a.out
), y se heredará a los procesos iniciados por ella. Pero no & "; Burbujeará &"; en el shell que ejecutó set
. Esa es también la razón por la cual los comandos como export
o <=> son programas integrados de shell en lugar de programas reales. Pagar & Quot; ayuda a exportar & Quot; en fiesta