Eğer yaparsam (Bourne benzeri bir kabukta):
exec 3> file 4>&3 5> file 6>> file
Dosya tanımlayıcıları 3 ve 4, 4 dup()
3'ten edindiğinden, aynı açık dosya açıklamasını paylaşın (aynı özellikler, dosya içindeki aynı ofset ...). Bu işlemin dosya tanımlayıcıları 5 ve 6 farklı bir açık dosya tanımındayken (örneğin, her biri dosyada kendi işaretçilerine sahiptir).
Şimdi, lsof
çıktı olarak, tek gördüğümüz:
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
Şununla biraz daha iyi 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
(burada Linux 3.16'da) fd 6'nın farklı bayrakları olduğunu görüyoruz, bu yüzden fd 3, 4 veya 5'tekinden farklı bir açık dosya açıklaması olmalı , ancak bundan fd 5'in farklı açık dosya açıklaması . İle -o
, ofseti de görebiliyoruz, ancak yine aynı ofset, aynı açık dosya açıklaması olduğunu garanti etmiyor .
Bunu bulmanın müdahaleci olmayan 1 yolu var mı? Harici olarak mı, yoksa bir işlemin kendi dosya tanımlayıcıları için mi?
1 . Sezgisel bir yaklaşım, bir fd'nin bayraklarını değiştirmek ve fcntl()
sonuç olarak diğer dosya tanımlayıcılarının bayraklarını güncellediğini görmek olabilir, ancak bu ideal veya aptal kanıt değildir.