प्रश्न Getting Filename from file descriptor in C का एक संस्करण। यह लिनक्स के बारे में है।फ़ाइल डिस्क्रिप्टर से नाम बदलें?
यदि मेरे पास एक फ़ाइल डिस्क्रिप्टर है जो एक नियमित फ़ाइल को संदर्भित करता है, तो क्या मैं फ़ाइल डिस्क्रिप्टर को एक नया फ़ाइल नाम देकर "सहेज सकता हूं" (कहीं भी उसी डिवाइस पर जहां यह रहता है)? मैं नाम (2) या लिंक (2) के समान कुछ ढूंढ रहा हूं लेकिन यह फ़ाइल नाम के बजाय फ़ाइल डिस्क्रिप्टर इनपुट के रूप में स्वीकार करेगा।
नाम (2) और लिंक (2) के साथ समस्या यह है कि भले ही आप फ़ाइल अवरोधक से फ़ाइल नाम पर जाने का प्रयास कर सकते हैं, यह असफल हो सकता है। मैं उस मामले के बारे में अधिक सटीक सोच रहा हूं जहां खोला गया फ़ाइल डिस्क्रिप्टर एक फ़ाइल को संदर्भित करता है जो पहले से ही अनलिंक था --- इस मामले में, फ़ाइल का कोई और नाम नहीं है। ऐसा लगता है कि फ़ाइल डिस्क्रिप्टर को बंद करते समय फ़ाइल को हटाने से रोकने का कोई तरीका नहीं है। लेकिन क्या मैं गलत हूँ? क्या हम पॉज़िक्स या यहां तक कि लिनक्स एपीआई के साथ भी इसे एक नाम दे सकते हैं?
अद्यतन: हम वास्तव में /proc/<pid>/fd/<fd>
में लिनक्स पर एक हटाई गई फ़ाइल की सामग्री देख सकते हैं, भले ही यह एक टूटी प्रतीकात्मक लिंक की तरह दिखता हो। हम ऐसी फ़ाइल को रीमटेरियलाइज़ करने के लिए लिंक (2) या एलएन (1) का उपयोग नहीं कर सकते हैं, हालांकि, ऐसा लगता है कि हम एक क्रॉस-डिवाइस लिंक करने की कोशिश कर रहे हैं।
लेकिन आप सामग्री को fd/ फ़ाइल से कॉपी कर सकते हैं। मूर्खतापूर्ण है कि आप इसे फिर से नहीं जोड़ सकते हैं। –
यहां अच्छे उत्तर के साथ अनिवार्य रूप से एक ही प्रश्न: http://stackoverflow.com/q/4171713/4421 – pixelbeat