अगर मैं (एक बॉर्न की तरह खोल में):
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
(यहाँ लिनक्स ३.१६ पर) हम देखते हैं कि fd ६ में अलग-अलग झंडे हैं, इसलिए इसे ३, ४ या ५ में से एक से एक अलग खुली फ़ाइल का विवरण होना चाहिए , लेकिन इससे हम नहीं बता सकते कि fd ५ पर है विभिन्न खुले फ़ाइल विवरण । के साथ -o
, हम भी ऑफसेट देख सकते हैं, लेकिन फिर से वही ऑफसेट की गारंटी नहीं है यह एक ही खुला फ़ाइल विवरण है ।
वहाँ किसी भी गैर घुसपैठ 1 तरीका है कि पता लगाने के लिए है? बाहरी रूप से, या किसी प्रक्रिया के लिए स्वयं के फ़ाइल डिस्क्रिप्टर?
1 है । एक हेयुरिस्टिक दृष्टिकोण के साथ एक एफडी के झंडे को बदलने के लिए हो सकता है fcntl()
और देखें कि अन्य फाइल डिस्क्रिप्टर के परिणामस्वरूप उनके झंडे अपडेट किए गए हैं, लेकिन यह स्पष्ट रूप से आदर्श नहीं है और न ही मूर्ख प्रमाण