|
||
| [IT] Kylix, Libc.pas: variabili d'ambiente | ||
|
Kylix, Libc.pas: variabili d'ambiente L'ambiente e' un vettore di stringhe con formato nome_variabile=valore_variabileproprio di una shell e messo a disposizione delle applicazioni che vengono eseguite. Vi si possono trovare informazioni sulla shell usata, sul nome dell'host, sull'utente, ecc. L'ambiente viene generealmente usato per passare dei valori ben precisi ai programmi. Ad esempio, il comando "java" (jdk: http://java.sun.com), usa la variabile d'ambiente "CLASSPATH" per sapere dove andare a cercare le classi per l'esecuzione di applicazioni java. Un tipico esempio di utilizzo dell'ambiente, puo' essere l'indicazione della directory contenente i file di configurazione di un programma. Dalla shell e' possibile digitare "env" per leggere le viariabili di ambiente. Ogni shell non e' detto che abbia le stesse variabili. Esiste una serie di variabili assegnate alla shell appena viene aperta, ed una serie di variabili che possono essere state aggiunte successivamente. Avendo ogni shell una vita a parte, quindi si possono avere vettori diversi. Una variabile d'ambiente puo' essere eliminata, modificata o aggiunta. Inoltre si possono eliminare tutte quelle non di sistema (SHELL, TERM, ed altre non possono essere eliminate: esempio 1 nel codice Kylix mostrato). Un programma kylix puo' compiere tali operazioni grazie alla seguenti funzioni/procedure dichiarate nella libreria "Libc.pas": function clearenv: integer; function getenv(nome: PChar):PChar; function putenv(riga: PChar):integer; function setenv(nome: PChar; valore: PChar; sovrascrivi: integer):integer; procedure unsetenv(nome: PChar);Le dichiarazioni mostrate sono una traduzione in Object Pascal delle analoghe presenti in "/usr/include/stdlib.h". Di seguito viene data una spiegazione veloce delle singole funzioni, da integrare con il codice mostrato alla fine.
//Project1.dpr
//------------
{
Programma di esempio per l'utilizzo delle variabili
d'ambiente in kylix.
Linux&Me - http://www.feelinglinux.com
Giansante Gabriele (c) 2002
}
program testenv;
{$APPTYPE CONSOLE}
uses
Libc,SysUtils;
var
//Valore rappresentante l'esito dell'esecuzione
//di alcune funzioni
retval: integer;
//Nome e valore di una variabile d'ambiente
nome,valore: String;
//Utilizzata per "setenv", indica se sovrascrivere una
//variabile eventualmente gia' presente
sovrascrivi: integer;
begin
//Inseriamo nell'ambiente la variabile test che
//servira' come ausilio per gli esempi successivi.
//Per vederne il funzionamento, osservare l'esempio 2.
putenv('test=1');
//L'ambiente prima delle manipolazioni degli esempi:
//leggere il file ambiente_prima.txt
retval := Libc.system('env>ambiente_prima.txt');
writeln(IntToStr(retval)+': env>ambiente_prima.txt');
{*************************************************}
{
Esempio 1 - clearenv
--------------------
Eliminazione delle variabili d'ambiente non essenziali
(quelle rimaste non possono essere cancellate con
"unsetenv").
}
retval := clearenv;
writeln(IntToStr(retval)+': clearenv');
{
Esempio 2 - putenv
------------------
Inserimento di una variabile d'ambiente con "putenv".
}
//nome := 'cavoli';
//valore := 'a merenda';
//retval := putenv(PChar(nome+'='+valore));
//writeln(IntToStr(retval)+': putenv');
{
Esempio 3 - setenv
------------------
Inserimento variabile d'ambiente con setenv.
"sovrascrivi" vale 0, quindi non accade niente.
Per settare effettivamente la variabile "test" a 2,
commentare la riga "putenv('test=1')" oppure
assegnare 1 a "sovrascrivi".
valore='2'; sovrascrivi=0 Non cambia niente
valore='2'; sovrascrivi=1 "test" passa da 1 a 2
}
//nome := 'test';
//valore := '2';
//sovrascrivi := 0;
//retval := setenv(PChar(nome),PChar(valore),sovrascrivi);
//writeln(IntToStr(retval)+': setenv');
{
Esempio 4 - getenv
------------------
Lettura variabile d'ambiente con getenv.
Valore risulta vuoto se la variabile non esiste.
Ad esempio, se proviamo ad usare "test2", "writeln"
stampa ": setenv".
}
//nome := 'SHELL';
//valore := String(getenv(PChar(nome)));
//writeln(valore+': getenv');
{
Esempio 5 - unsetenv
--------------------
Eliminazione variabile "test" dall'ambiente con
unsetenv.
Se nell'esempio era stata commentata la riga
"putenv('test=1')", levare il commento.
ATTENZIONE: Non usare nomi non esistenti oppure i nomi
che rimangono dopo l'applicazione di "clearenv" (esempio 1).
dopo
}
//nome := 'test';
//unsetenv(PChar(nome));
{*************************************************}
//L'ambiente dopo le manipolazioni degli esempi:
//leggere il file ambiente_dopo.txt
retval := Libc.system('env>ambiente_dopo.txt');
writeln(IntToStr(retval)+': env>ambiente_dopo.txt');
end.
|
||
(c) 1999-2006
|