Portál AbcLinuxu, 19. dubna 2024 20:10


Dotaz: Jak pracovat s env proměnnými v C programu?

30.10.2006 17:30 Ctirad Feřtr | skóre: 43 | Praha
Jak pracovat s env proměnnými v C programu?
Přečteno: 112×
Odpovědět | Admin
Zdravím,

nějak se mi to nedaří. Funkce putenv() ani setenv() mi nic nevytvoří ani nezmění hodnotu existující proměnné. Podle návratové hodnoty je všechno v pořádku. Co dělám špatně?
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

michich avatar 30.10.2006 17:37 michich | skóre: 51 | blog: ohrivane_parky
Rozbalit Rozbalit vše Re: Jak pracovat s env proměnnými v C programu?
Odpovědět | | Sbalit | Link | Blokovat | Admin
Nezapomínáte náhodou na to, že můžete měnit prostředí pouze pro aktuální proces a případně jeho potomky?
30.10.2006 18:31 Ctirad Feřtr | skóre: 43 | Praha
Rozbalit Rozbalit vše Re: Jak pracovat s env proměnnými v C programu?
V tom je nejspíš právě zakopaný pes. Mám skript (ten už sám o sobě nastaví pár proměnných), z toho je spuštěný základní program v C a ten si průběžně spouští několik pomocných skriptů, které zase volají další programy. Potřeboval bych nějak zařídit, aby všechny tyto programy a skripty měly přístup k několika proměnným a mohli přenastavovat jejich hodnoty. Jde to vůbec?
30.10.2006 18:49 zabza | skóre: 52 | blog: Nad_sklenkou_cerveneho
Rozbalit Rozbalit vše Re: Jak pracovat s env proměnnými v C programu?
Nemůžete měnit promměnou nadřazeného (volajícího) procesu. Můžete si to představit tak, že každý proces má svoji kopii proměnné, kterou může měnit.
Luboš Doležel (Doli) avatar 30.10.2006 17:38 Luboš Doležel (Doli) | skóre: 98 | blog: Doliho blog | Kladensko
Rozbalit Rozbalit vše Re: Jak pracovat s env proměnnými v C programu?
Odpovědět | | Sbalit | Link | Blokovat | Admin
#include <stdlib.h>

int main()
{
        setenv("test", "value", 1);
        printf("Value of test is %s\n", getenv("test"));
        return 0;
}
$ ./test
Value of test is value
30.10.2006 18:34 Ctirad Feřtr | skóre: 43 | Praha
Rozbalit Rozbalit vše Re: Jak pracovat s env proměnnými v C programu?
Díky za ochotu, tohle samozřejmě umím a je to v manu. Mě jde o to, jak to v jednom programu zapsat a ve druhém programu (nebo skriptu) přečíst a naopak.
30.10.2006 20:12 cynik
Rozbalit Rozbalit vše Re: Jak pracovat s env proměnnými v C programu?
Pochopil jsem to tak, ze promene prostredi se vzdycky vytvari pro kazdy novy proces (nebo subproces) kopii z tech stavajicich a po skonceni procesu tedy zaniknou.

Procesy proto navzajem mohou komunikovat i jinak. Napadaji me tyhle moznosti: pres soubor, pres pipu, pres sdilenou pamet. Pokud jde o soubory, neni to zase az tak spatna cesta, akorat je to trochu pomalejsi, ale zase se daji prenaset velky objemy dat. Pipa (socket) je dobra, kdyz spolu maji komunikovat dva nezavysle procesy, treba s jinymi pravy, v chrootu, na jinych pocitacich. Sdilena pamet je takova lepsi nahrada environmentalnich prostredi, avsak je pomerne nebezpecne s ni pracovatm hlavne proto, ze obvykle se jen vytvori a nikdo uz ty zbytecne alokovane kusy pameti nemaze (vyjma restartu systemu).
Josef Kufner avatar 31.10.2006 00:55 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: Jak pracovat s env proměnnými v C programu?
Sdilena pamet neni spatna, jen je proste potreba si dat pozor na synchronizaci a uklid.

Celkem fajn je taky obyčejný unixový socket. Jeden server, spousta klientů, obousměrná komunikace na jedno filedescriptoru.

Pipa muže být i pojmenovaná (v podobě souboru ve filesystému).

Pak jsou tu ještě fronty zpráv (podle posixu), ale s těma jsem se nějak ještě nezabýval.

Záleží na tom, co chceš předávat za data a co máš za programy, co to má dělat.
Hello world ! Segmentation fault (core dumped)

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.