La duda es: ¿como se cambia una variable de entorno en linux mediante codigo C/C++? A ser posible sin tener que llamar a system().
Saludos.
hasta donde se la mayoria de archivos que contienen variables de entorno estan en /etc/env.d
Gentoo yoxter # cd /etc/env.d
Gentoo env.d # ls
00basic 03opencl 05binutils 20java-config 37fontconfig 44qt4 50gtk2 60ladspa 80cgc 90nss 99gentoolkit-env gcc
00glibc 03opengl 09sandbox 30gnupg 43kdepaths 44qt4-graphicssystem 50ncurses 70less 80mercurial 90xdg-data-base 99oxygen-gtk2 python
02locale 04gcc-x86_64-pc-linux-gnu 20ant 30xdg-data-local 44qca2 50gconf 60blender 77kde 90games 98ca-certificates binutils
otros distros y unix-like como Gentoo y FreeBSD almacenan casi todos las Flags de compilacion en el
/etc/make.conf
si Logras editar estos archivos desde tu programa usando fstream o alguna otra libreria deberia bastar
Pasate por aqui : http://www.gentoo.org/doc/es/handbook/handbook-x86.xml?part=2&chap=5 (http://www.gentoo.org/doc/es/handbook/handbook-x86.xml?part=2&chap=5)
http://pubs.opengroup.org/onlinepubs/007904975/functions/setenv.html
Cita de: yoxter en 21 Octubre 2012, 17:18 PM
hasta donde se la mayoria de archivos que contienen variables de entorno estan en /etc/env.d
Gentoo yoxter # cd /etc/env.d
Gentoo env.d # ls
00basic 03opencl 05binutils 20java-config 37fontconfig 44qt4 50gtk2 60ladspa 80cgc 90nss 99gentoolkit-env gcc
00glibc 03opengl 09sandbox 30gnupg 43kdepaths 44qt4-graphicssystem 50ncurses 70less 80mercurial 90xdg-data-base 99oxygen-gtk2 python
02locale 04gcc-x86_64-pc-linux-gnu 20ant 30xdg-data-local 44qca2 50gconf 60blender 77kde 90games 98ca-certificates binutils
otros distros y unix-like como Gentoo y FreeBSD almacenan casi todos las Flags de compilacion en el
/etc/make.conf
si Logras editar estos archivos desde tu programa usando fstream o alguna otra libreria deberia bastar
Pasate por aqui : http://www.gentoo.org/doc/es/handbook/handbook-x86.xml?part=2&chap=5 (http://www.gentoo.org/doc/es/handbook/handbook-x86.xml?part=2&chap=5)
1) /etc/env.d no es estándar, se usa sólo en Gentoo si no me falla la memoria ... si otra distro le usa, sigue siendo no-estándar
2) Si la pregunta hubiese sido cambiar variables de entorno en un lenguaje de scripting o durante el start-up del sistema, lo hubiese posteado en Unix/Unix-Like ... no, está en C/C++
3) /etc/make.conf es un fichero muy específico de metadistro (el nombre te sugiere eso ... "make", es el fichero que conduce la compilación de paquetes del sistema, no está pensado para variables fuera de eso)
4) Como Lambda bien dijo, está setenv() (http://pubs.opengroup.org/onlinepubs/9699919799/functions/setenv.html) y getenv() (http://pubs.opengroup.org/onlinepubs/9699919799/functions/getenv.html) para usarse en C/C++ (el subforo donde estás)
Saludos.
Es que el otro dia encontre el truco de la variable de entorno LD_PRELOAD: http://systemadmin.es/2009/09/capturar-llamadas-al-sistema-con-ld_preload / http://jjmora.es/sabias-que-la-variable-ld_preload/ y lo estuve probando cambiando esta variable desde la terminal, y no sabia como hacerlo desde codigo. Gracias y saludos ;)
EDITO: He echo un pequeño codigo de prueba:
#include <stdlib.h>
int main()
{
setenv("LD_PRELOAD", "/home/user/libprueba.so", 1);
system("echo $LD_PRELOAD");
return 0;
}
Y en la terminal:
$ gcc prueba.c -o prueba
./prueba
/home/user/libprueba.so //Hasta aqui bien
//Ahora saco por pantalla esta variable
echo $LD_PRELOAD
//En esta linea no sale nada, la variable ha cambiado su valor a 0 :(
$