[1] Se viene fornito un path, tutte le backslash presenti nella stringa
devono essere raddoppiate, onde evitare che il compilatore le
interpreti come parte di sequenze di escape. Ad esempio, la stringa
non viene gestita correttamente, mentre
funziona come desiderato.
[2] A dire il vero anche le altre funzioni (spawn...(), exec...()) possono eseguire un'istanza dell'interprete dei comandi. Bisogna
però fare attenzione a non cacciarsi nei guai: una chiamata come
è lecita e viene tranquillamente eseguita, ma l'effetto
dell'opzione /p su COMMAND.COM è di renderne permanente
in memoria la nuova istanza: in tal caso il comando EXIT non ha
alcun effetto, e non è più possibile riprendere
l'esecuzione del parent. Per ragioni analoghe, l'esecuzione di
un programma TSR attraverso la system()
potrebbe avere conseguenze distruttive.
[3] Vedere quanto detto circa le variabili.
[4] Detto servizio utilizza il valore presente nel registro macchina
AL per stabilire il tipo di azione da intraprendere: in particolare,
AL = 0 richiede il caricamento e l'esecuzione del programma
(funzioni spawn...() se il primo parametro è P_WAIT), mentre
AL = 3 richiede il caricamento e l'esecuzione del child
nella memoria riservata al parent (overlay), il quale viene a
tutti gli effetti sostituito dal nuovo programma (funzioni spawn...()
se il primo parametro è P_OVERLAY, e funzioni exec...()).
[5] E' immediato verificarlo con il codice seguente:
che esegue una istanza dell'interprete dei comandi; digitando
il comando SET al prompt viene visualizzato l'environment corrente.
Il comando EXIT consente di chiudere la shell e restituire il
controllo al parent.
[6] La variabile environ contiene l'indirizzo dell'array di stringhe
(ciascuna avente formato NOME=VAL, dove NOME rappresenta il nome
della variabile e VAL il suo valore) rappresentanti l'environemnt
del programma. Se si utilizza putenv() per modificare il valore
di una variabile o per inserirne una nuova, il valore di environ
viene automaticamente aggiornato qualora sia necessario rilocare
l'array. Dichiarando main() con tre parametri il terzo rappresenta il puntatore all'array delle stringhe di
environment ed inizialmente ha lo stesso valore di environ, ma
non viene modificato da putenv().
"c:\dos\tree"
"c:\\dos\\tree"
system("command /p");
static char *newenv[] = {"USER=Pippo","PATH=C:\\DOS",NULL);
...
spawnlpe(P_WAIT,"command.com","command.com",NULL,newenv);