私が(Bourneのようなシェルで)する場合:
exec 3> file 4>&3 5> file 6>> file
ファイル記述子3と4は、4がdup()3から編集されたため、同じ開いているファイルの説明を共有します(同じプロパティ、ファイル内の同じオフセット...)。そのプロセスのファイル記述子5と6は、異なるオープンファイル記述上にあります(たとえば、それぞれファイル内に独自のポインターがあります)。
これで、lsof出力で表示されるのは次のとおりです。
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
それは少し良いです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
(ここではLinux 3.16)fd 6には異なるフラグが表示されるため、fd 3、4、または5にあるものとは異なるオープンファイル記述でなければなりませんが、fd 5が異なるオープンファイル記述。で-o、オフセットも見ることができましたが、同じオフセットは同じオープンファイル記述であることを保証しません。
それを見つけるための非侵入的な1つの方法はありますか?外部的に、またはプロセス自身のファイル記述子のために?
1。ヒューリスティックなアプローチの1つは、1つのfdのフラグを変更fcntl()し、その結果フラグが更新される他のファイル記述子を確認することですが、それは明らかに理想的でも愚かでもありません