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);                          
     }
¿Fue útil?

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top