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 lsof
sortie, 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