私が(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()
し、その結果フラグが更新される他のファイル記述子を確認することですが、それは明らかに理想的でも愚かでもありません