Wenn ich das tue (in einer Bourne-ähnlichen Shell):
exec 3> file 4>&3 5> file 6>> file
Die Dateideskriptoren 3 und 4 haben dup()
dieselbe offene Dateibeschreibung (gleiche Eigenschaften, gleicher Versatz in der Datei ...) , da 4 von 3 abgeleitet wurde . Während sich die Dateideskriptoren 5 und 6 dieses Prozesses in einer anderen offenen Dateibeschreibung befinden (z. B. haben sie jeweils einen eigenen Zeiger in der Datei).
In der lsof
Ausgabe sehen wir nur:
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
Es ist ein bisschen besser mit 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
(hier unter Linux 3.16) Da fd 6 unterschiedliche Flags hat, muss es sich um eine andere offene Dateibeschreibung handeln als fd 3, 4 oder 5, von der wir jedoch nicht sagen können, dass fd 5 auf a liegt andere offene Dateibeschreibung . Mit -o
könnten wir auch den Versatz sehen, aber der gleiche Versatz garantiert nicht, dass es die gleiche offene Dateibeschreibung ist .
Gibt es einen nicht-intrusive 1 Weg , das herauszufinden? Extern oder für eigene Dateideskriptoren eines Prozesses?
1 . Ein heuristischer Ansatz könnte darin bestehen, die Flags einer FD zu ändern fcntl()
und zu sehen, welche anderen Dateideskriptoren ihre Flags als Ergebnis aktualisieren, aber das ist offensichtlich weder ideal noch narrensicher