Якщо я (в оболонці Борна):
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 знаходиться на a різні відкриті описи файлів . З -o
, ми могли б також побачити зсув, але знову ж зміщення не гарантує , що це те ж саме відкрите опис файлу .
Чи є якийсь не нав'язливий 1 спосіб дізнатися це? Зовні або для власних дескрипторів файлів процесу?
1 . Одним із евристичних підходів може бути зміна прапорів одного fd fcntl()
і перегляд того, в яких інших дескрипторах файлів оновлені їхні прапори як результат, але це очевидно не є ідеальним, ані дурним доказом