Si je le fais (dans un shell de type Bourne):
exec 3> file 4>&3 5> file 6>> file
Les descripteurs de fichiers 3 et 4, puisque 4 a été dup()édité à partir de 3, partagent la même description de fichier ouvert (mêmes propriétés, même décalage dans le fichier ...). Alors que les descripteurs de fichiers 5 et 6 de ce processus se trouvent sur une description de fichier ouverte différente (par exemple, ils ont chacun leur propre pointeur dans le fichier).
Maintenant, en lsofsortie, tout ce que nous voyons est:
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
C'est un peu mieux avec 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
(ici sur Linux 3.16) en ce que nous voyons que fd 6 a des drapeaux différents, donc il doit s'agir d'une description de fichier ouvert différente de celle de fd 3, 4 ou 5, mais à partir de cela, nous ne pouvons pas dire que fd 5 est sur un description de fichier ouvert différente . Avec -o, nous pourrions également voir le décalage, mais là encore, le même décalage ne garantit pas qu'il s'agit de la même description de fichier ouvert .
Y at - il non intrusif 1 moyen de savoir? En externe ou pour les descripteurs de fichiers d'un processus?
1 . Une approche heuristique pourrait être de changer les indicateurs d'un fd avec fcntl()et de voir avec quels autres descripteurs de fichier leurs indicateurs sont mis à jour en conséquence, mais ce n'est évidemment pas idéal ni infaillible