specificando il numero di file descrittore?
-
26-09-2019 - |
Domanda
La mia comprensione era che non si poteva controllare il descrittore di file (intero) assegnato dal sistema operativo quando si apre un nuovo file utilizzando open (). Allora come è possibile in una shell bash per assegnare un descrittore di file specifico utilizzando un comando come
exec 5>&1
(suppongo ho potuto scoprire leggendo le fonti bash ...)
Soluzione
Credo che tu abbia ragione che a volte i descrittori di file possono essere già in uso. Ho ricevuto questo da http://tldp.org/LDP/abs /html/io-redirection.html#FTN.AEN17716
"Utilizzo descrittore di file 5 potrebbe causare problemi. Quando Bash crea un processo figlio, come con exec, le eredita bambino fd 5 (vedi Chet Ramey e-mail archiviati, Oggetto: Re: descrittore di file 5 viene tenuto aperto ) Miglior lasciare questa particolare fd da sola. ".
Il solutiont a questo è riportato alla sezione 3.6 paragrafo 2 del manuale bash.
Ogni reindirizzamento che può essere preceduto da un numero descrittore di file possono essere invece preceduto da una parola del modulo
{varname}
. In questo caso, per ogni operatore di ridirezione tranne> & - e <& -, la shell allocare una maggiore descrittore di file a 10 e assegnarlo a {} nomevar. Se> & - o <& -. È preceduta da {varname}, il valore della varname definisce il descrittore di file per chiudere
Ad esempio
#!/bin/bash
exec {NEW_STDOUT}>&1
echo "Hello" >&$NEW_STDOUT
exec {NEW_STDOUT}>&-
Altri suggerimenti
Vedere la href="http://www.manpagez.com/man/2/dup2/" rel="nofollow noreferrer"> dup2 chiamata di sistema Unix
Inoltre, i descrittori di file vengono assegnati in sequenza, quindi se conoscete 0, 1, 2, ..., n sono già aperta e nessuno di loro sono stati chiusi, la prossima sarà n + 1.