मैं ऐसी स्थिति को उत्तेजित करना चाहता हूं जहां कोई फ़ाइल डिस्क्रिप्टर शेष नहीं है।मैं फ़ाइल डिस्क्रिप्टर की कमी का अनुकरण कैसे कर सकता हूं?
मैं सोच कर दिया गया है के बारे में 2 संभावनाएं:
- फ़ाइलों के हजारों खुलने बेतरतीब ढंग से खुला का परिणाम जब तक है -1
- उपलब्ध फ़ाइल डिस्क्रिप्टर का एक बहुत कम संख्या सेट (मान लें stdin, stdout और stderr)।
आप यह कैसे करेंगे?
या सी – o11c
से ['setrlimit'] (http://linux.die.net/man/2/setrlimit) का उपयोग करें क्या शैल बाहरी प्रोग्राम को उत्पन्न करते समय फ़ाइल डिस्क्रिप्टर बनाते हैं? मुझे लगता है कि एक पाइपलाइन को कम से कम 'पाइप (2)' का उपयोग करने की आवश्यकता होगी और विभिन्न प्रकार के प्रतिस्थापन भी मुद्दों का कारण बन सकते हैं। कम से कम, आपको अवगत होना चाहिए कि यह उल्लिट आपके खोल को बहुत ही बाधित कर देगा। – Kevin
@ केविन, पुनर्निर्देशन 'डुप्लिकेट (2) ',' डुप् 2 (2) ', या' पाइप (2) 'के माध्यम से किया जा सकता है, लेकिन जब खोल केवल एक प्रोग्राम और केवल कांटेदार बनाता है और' execve (2)' जो उपप्रोसेसर को नए बनाए बिना पहले 3 वर्णनकर्ताओं से गुज़रता है। वास्तविक पुनर्निर्देशन के लिए, चाहे आप जो भी उपयोग करते हैं, एक वर्णक बनाया गया है, क्योंकि वर्णनकर्ता को फिर से सौंपे जाने से पहले डुप्लिकेट किया गया है, क्योंकि stdin पहले से ही शैल के stdin वर्णनकर्ता से जुड़ा हुआ है। आपकी ऊपरी सीमा तक परीक्षण के बाद सीमा को फिर से उठाया जा सकता है ('ulimit -n' के साथ डिफ़ॉल्ट देखें)। – Matthew