प्राप्त करें मैं अपने सी प्रोग्राम में व्यवहार को कार्यान्वित करना चाहता हूं ताकि यदि एक सिगिनट होता है, तो मैं सभी खुली फ़ाइल डिस्क्रिप्टर बंद करता हूं। क्या उनकी सूची पाने का कोई आसान तरीका है?सी सभी खुली फ़ाइल डिस्क्रिप्टर
उत्तर
मैं ब्रूट फोर्स का उपयोग करता हूं: for (i = 0; i < fd_max; ++i) close (i);
। त्वरित और सुंदर पोर्टेबल।
अपने सभी खुले फ़ाइल डिस्क्रिप्टरों का ट्रैक रखें और उन्हें अलग-अलग बंद करें।
सामान्य स्थिति में, आपके द्वारा उपयोग की जाने वाली लाइब्रेरी में एक खुली फ़ाइल हो सकती है, और इसे बंद करने से वह लाइब्रेरी गलत व्यवहार कर सकती है।
वास्तव में, वही समस्या आपके कोड में मौजूद हो सकती है, क्योंकि यदि आप फ़ाइल डिस्क्रिप्टर को अंधाधुंध रूप से बंद करते हैं लेकिन आपके प्रोग्राम का एक और हिस्सा अभी भी फाइल डिस्क्रिप्टर को याद करता है और इसका उपयोग करने का प्रयास करता है, तो उसे एक अनपेक्षित त्रुटि मिलेगी या (यदि अन्य फाइलें तब से खोली गई हैं) गलत फ़ाइल पर काम करती है। फ़ाइल खोलने के लिए ज़िम्मेदार घटक के लिए यह बहुत बेहतर है, इसे बंद करने के लिए जिम्मेदार भी है।
यदि आप उपलब्ध हैं, तो आप /proc/<pid>/fd.
की सामग्री को पढ़ सकते हैं।
लेकिन संभावित दौड़ के बारे में जागरूक रहें, जो तब हो सकता है जब आपका एप्लिकेशन कुछ पढ़ता है या आपके पढ़ने के बीच /proc/<pid>/fd
के बीच नए खुलता है और आप जो पढ़ते हैं उसे बंद करने जा रहे हैं।
तो मुझे लगता है कि मैं केविन रीड के दृष्टिकोण की सिफारिश करना चाहता हूं।
आप क्यों मानते हैं, '/ proc' उपलब्ध है? यह अस्तित्व में सबसे अयोग्य दुःस्वप्न के बारे में है। – Jens
आप सही हैं। मैंने अपनी टिप्पणी को केवल कुछ सिस्टम के लिए उपयुक्त होने के लिए संशोधित किया। @ जेन्स – alk
यदि पोर्टेबिलिटी के बारे में चिंतित है, तो आप '/ dev/fd /' पढ़ सकते हैं। यह '/ proc/self/fd' से अधिक पोर्टेबल है। –
POSIX सिस्टम के लिए मेरे समाधान:
सभी खोला fd के न्यूनतम मूल्य संभव हो रहे हैं।
open(2)
पर एक रैपर फ़ंक्शन बनाएं।
आपका नया फ़ंक्शन अनुरोधित एफडी को खोलता है (और लौटाता है) और define_if_is_the_higtest_fd_and_store_it()
नामक फ़ंक्शन पर अपना मान पास करता है।
आपके पास int hightest_fd_saved
केवल एक सिंगलटन फ़ंक्शन के लिए पहुंच योग्य होना चाहिए (save_fd()
नामक केवल 1 'वर्णक तालिका') (प्रारंभिक मान 3 है (cuz stderr
2 है)।
अपने सिग्नल फ़ंक्शन पर SIGINT
कॉन्फ़िगर करें। अंदर, आप [3, return_fd()
] से एक लूप करते हैं।
मुझे लगता है कि यह है ... संकेत संचालकों के लिए
- 1. फ़ाइल डिस्क्रिप्टर
- 2. सी # खुली फ़ाइल,% userprofile%
- 3. सॉकेट डिस्क्रिप्टर बनाम फ़ाइल डिस्क्रिप्टर
- 4. सभी खुली फ़ाइलों
- 5. एक ही फ़ाइल में एकाधिक फ़ाइल डिस्क्रिप्टर, सी
- 6. सॉकेट और फ़ाइल डिस्क्रिप्टर
- 7. अंतर्निहित फ़ाइल डिस्क्रिप्टर
- 8. थ्रेड और फ़ाइल डिस्क्रिप्टर
- 9. सिग्विन धीमी फ़ाइल खुली
- 10. इंटरसेप्ट विंडोज़ खुली फ़ाइल
- 11. वर्तमान में सभी खुली फ़ाइल हैंडल सूचीबद्ध करें?
- 12. डुप्लिकेट फ़ाइल डिस्क्रिप्टर अपनी फ़ाइल ऑफ़सेट
- 13. fdopen बुला: खराब फ़ाइल डिस्क्रिप्टर
- 14. फ़ाइल डिस्क्रिप्टर से नाम बदलें?
- 15. दो फ़ाइल डिस्क्रिप्टर एक ही फ़ाइल में
- 16. सी में, फ़ाइल डिस्क्रिप्टर अवरुद्ध करने के लिए कैसे?
- 17. फ़ाइल फ़ाइल डिस्क्रिप्टर से फ़ाइल फ़ाइल निकालें या FILE *
- 18. बैश डबल प्रोसेस प्रतिस्थापन खराब फ़ाइल डिस्क्रिप्टर
- 19. क्या फॉपेन फ़ाइल डिस्क्रिप्टर बनाता है?
- 20. फ़ाइल डिस्क्रिप्टर और फ़ाइल पॉइंटर के बीच क्या अंतर है?
- 21. किसी प्रक्रिया में सभी खुली फ़ाइलों को बंद करना
- 22. पायथन खुली कच्ची ऑडियो डेटा फ़ाइल
- 23. बहुत अधिक खुली फ़ाइल त्रुटि, java.io.FileNotFoundException
- 24. एक विशिष्ट वर्कशीट पर खुली एक्सेल फ़ाइल
- 25. लेमन शर्तों में खुली फ़ाइल स्पष्टीकरण
- 26. जांचें कि कोई फ़ाइल खुली है
- 27. लेखन के लिए QFile खुली फ़ाइल
- 28. एक खुली फ़ाइल वस्तु का आकार
- 29. आर्टिफैक्ट डिस्क्रिप्टर अपवाद: आर्टिफैक्ट डिस्क्रिप्टर मेवेन त्रुटि
- 30. पायथन डिस्क्रिप्टर
खोजें। –
आप ऐसी चीज क्यों चाहेंगे? – qdot
आपके बाहर निकलने के बाद(); या 'वापसी' मुख्य से, कर्नेल को आपके लिए उन फाइल डिस्क्रिप्टर को बंद करना चाहिए। – yeyo