Win32 का CreateFile
FILE_FLAG_DELETE_ON_CLOSE
है, लेकिन मैं लिनक्स पर हूं।प्रोग्राम समाप्ति (सी/सी ++) पर गारंटीकृत फ़ाइल हटाना
मैं एक अस्थायी फ़ाइल खोलना चाहता हूं जो हमेशा प्रोग्राम समाप्ति पर हटा दी जाएगी। मैं समझ सकता हूं कि प्रोग्राम क्रैश के मामले में यह गारंटी देने के लिए व्यावहारिक नहीं हो सकता है, लेकिन किसी भी अन्य मामले में मैं इसे काम करना चाहता हूं।
मुझे राय के बारे में पता है। मुझे सिग्नल के बारे में पता है। मुझे atexit(3)
के बारे में पता है। मुझे पता है कि मैं फ़ाइल खोल सकता हूं और इसे तुरंत हटा सकता हूं और फ़ाइल तब तक पहुंच योग्य रहेगी जब तक फाइल डिस्क्रिप्टर बंद नहीं होता है (जो एक दुर्घटना भी संभालता है)। इनमें से कोई भी एक पूर्ण और स्पष्ट समाधान की तरह लग:
- आरए II: वहाँ गया, किया है कि: मैं एक वस्तु जिसका नाशक फ़ाइल को हटा देता है, लेकिन यदि प्रोग्राम एक संकेत से समाप्त हो जाता है नाशक नहीं बुलाया जाता है।
- सिग्नल: मैं एक निम्न स्तरीय लाइब्रेरी लिख रहा हूं जो सिग्नल हैंडलर को एक मुश्किल प्रस्ताव पंजीकृत कर देता है। उदाहरण के लिए, यदि एप्लिकेशन सिग्नल का उपयोग करता है तो क्या होगा? मैं किसी भी पैर की उंगलियों पर कदम नहीं उठाना चाहता। मैं सामना करने के लिए
sigaction(2)
के कुछ चालाक उपयोग पर विचार कर सकता हूं ... लेकिन इस संभावना में अभी तक पर्याप्त विचार नहीं किया है। atexit(3)
: स्पष्ट रूप से बेकार, क्योंकि इसे असामान्य समाप्ति के दौरान नहीं कहा जाता है (उदाहरण के लिए सिग्नल के माध्यम से)।- प्रीemptive
unlink(2)
: यह बहुत अच्छा है सिवाय इसके कि मुझे फाइल सिस्टम में दिखाई देने के लिए फ़ाइल की आवश्यकता है (अन्यथा सिस्टम मॉनिटर/समस्या निवारण के लिए कठिन है)।
आप यहां क्या करेंगे?
अधिक विवरण
मैं अपने मूल पोस्ट मैं अब जो एहसास मैं शामिल हो जाना चाहिए था में एक विस्तार elided। इस मामले में "फ़ाइल" सख्ती से एक सामान्य फ़ाइल नहीं है, बल्कि एक POSIX संदेश कतार है। मैं इसे mq_open()
के माध्यम से बना देता हूं। इसे mq_close()
या close()
(पूर्व में मेरे सिस्टम पर उत्तरार्द्ध के लिए उपनाम है) के माध्यम से बंद किया जा सकता है। इसे mq_unlink()
के माध्यम से सिस्टम से हटाया जा सकता है। यह सब एक नियमित फ़ाइल, के समान को छोड़कर बनाता है कि मैं उस निर्देशिका को नहीं चुन सकता जिसमें फ़ाइल रहता है। यह वर्तमान सबसे लोकप्रिय उत्तर बनाता है (फ़ाइल को /tmp
में रखकर) अनावश्यक है, क्योंकि प्रणाली द्वारा "फ़ाइल" को वर्चुअल फाइल सिस्टम में बहुत सीमित क्षमता वाले सिस्टम द्वारा बनाया गया है। (मैंने में वर्चुअल फाइल सिस्टम को man mq_overview
में उदाहरण के बाद आरोहित किया है)।
यह भी बताता है कि मुझे दिखाई देने के लिए नाम क्यों चाहिए (तत्काल-अनलिंक दृष्टिकोण को अनावश्यक बनाने के लिए): "फ़ाइल" को दो या दो से अधिक प्रक्रियाओं के बीच साझा किया जाना चाहिए।
यह आइटम 4 है (नाम सुलभ रखने के लिए) जो इसे कठिन बनाता है। –
हर बार एक महत्वपूर्ण जानकारी छोड़ दी जाती है, जवाब घबराते हैं। आप अगली बार के लिए पता चल जाएगा। –