Cambiar variables de entorno en Linux

Iniciado por 0xDani, 21 Octubre 2012, 16:06 PM

0 Miembros y 1 Visitante están viendo este tema.

0xDani

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.
I keep searching for something that I never seem to find, but maybe I won't, because I left it all behind!

I code for $$$
Hago trabajos en C/C++
Contactar por PM

yoxter

#1
hasta donde se la mayoria de archivos que contienen variables de entorno estan en /etc/env.d

Código (bash) [Seleccionar]
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



Posiblemente soy el intento de programador mas fracaso de la historia !!


Foxy Rider

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

Código (bash) [Seleccionar]
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

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() y getenv() para usarse en C/C++ (el subforo donde estás)

Saludos.

0xDani

#4
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 :(
$
I keep searching for something that I never seem to find, but maybe I won't, because I left it all behind!

I code for $$$
Hago trabajos en C/C++
Contactar por PM