Se lo faccio (in una shell tipo Bourne):
exec 3> file 4>&3 5> file 6>> file
I descrittori di file 3 e 4, poiché 4 è stato modificato dup()
da 3, condividono la stessa descrizione del file aperto (stesse proprietà, stesso offset all'interno del file ...). Mentre i descrittori di file 5 e 6 di quel processo si trovano su una diversa descrizione del file aperto (ad esempio, ognuno ha il proprio puntatore nel file).
Ora, in lsof
uscita, tutto ciò che vediamo è:
zsh 21519 stephane 3w REG 254,2 0 10505865 /home/stephane/file
zsh 21519 stephane 4w REG 254,2 0 10505865 /home/stephane/file
zsh 21519 stephane 5w REG 254,2 0 10505865 /home/stephane/file
zsh 21519 stephane 6w REG 254,2 0 10505865 /home/stephane/file
È un po 'meglio con lsof +fg
:
zsh 21519 stephane 3w REG W,LG 254,2 0 10505865 /home/stephane/file
zsh 21519 stephane 4w REG W,LG 254,2 0 10505865 /home/stephane/file
zsh 21519 stephane 5w REG W,LG 254,2 0 10505865 /home/stephane/file
zsh 21519 stephane 6w REG W,AP,LG 254,2 0 10505865 /home/stephane/file
(qui su Linux 3.16) in quanto vediamo fd 6 ha flag diversi, quindi deve essere una descrizione del file aperto diversa da quella su fd 3, 4 o 5, ma da ciò non possiamo dire che fd 5 è su un diversa descrizione del file aperto . Con -o
, potremmo anche vedere l'offset, ma di nuovo lo stesso offset non garantisce che sia la stessa descrizione del file aperto .
C'è un non-intrusivo 1 modo per scoprirlo? Esternamente o per i descrittori di file propri di un processo?
1 . Un approccio euristico potrebbe essere quello di cambiare i flag di un fd fcntl()
e vedere quali altri descrittori di file hanno i loro flag aggiornati di conseguenza, ma questo ovviamente non è l'ideale né infallibile