c++ - filehippo - क्या विंडोज़ में खुली फाइलों की संख्या पर एक सीमा है



windows (5)

मैं वीसी ++ में fopen () के साथ बहुत सी फाइलें खोल रहा हूं लेकिन थोड़ी देर बाद यह विफल हो जाता है।

क्या फाइलों की संख्या की एक सीमा है जो आप एक साथ खोल सकते हैं?


एक ही समस्या में आया, लेकिन Embarcadero सी ++ का उपयोग - आरएडी स्टूडियो 10.2 के बिल्डर। उस चीज़ का सी-रनटाइम _getmaxstdio या _setmaxstdio प्रदान नहीं करता है, लेकिन कुछ macros और उनकी डिफ़ॉल्ट सीमा अन्य रनटाइम के लिए यहां जो कहा गया है उससे काफी कम है:

stdio.h:

/* Number of files that can be open simultaneously
*/
#if defined(__STDC__)
#define FOPEN_MAX (_NFILE_)
#else
#define FOPEN_MAX (_NFILE_)
#define SYS_OPEN  (_NFILE_)
#endif

_nfile.h:

#if defined(_WIN64)
#define _NFILE_ 512
#else
#define _NFILE_ 50
#endif

मुझे नहीं पता कि पाउलो को उस नंबर से कहाँ मिला .. विंडोज एनटी आधारित ऑपरेटिंग सिस्टम में प्रति प्रक्रिया खोले गए फाइल हैंडल की संख्या मूल रूप से भौतिक स्मृति से सीमित है - यह निश्चित रूप से सैकड़ों हजारों में है।


यदि कोई और स्पष्ट नहीं है कि सीमा किस पर लागू होती है, तो मेरा मानना ​​है कि यह एक प्रति-प्रक्रिया सीमा है और सिस्टम-व्यापी नहीं है।

मैंने फ़ाइलों को खोलने के लिए अभी तक एक छोटा परीक्षण कार्यक्रम लिखा है जब तक यह विफल नहीं हो जाता है। असफल होने से पहले यह 2045 फाइलों तक पहुंच जाता है (2045 + STDIN + STDOUT + STDERROR = 2048), तो मैंने इसे खोल दिया और एक और प्रतिलिपि चला दी।

दूसरी प्रतिलिपि ने वही व्यवहार दिखाया, जिसका अर्थ है कि मेरे पास कम से कम 4096 फाइलें एक साथ खुलती थीं।


हाँ, एक सीमा है।

सीमा ओएस, और स्मृति पर निर्भर करता है।

पुराने डॉस में सीमा 255 एक साथ खुली फाइलें थीं।

विंडोज एक्सपी में, सीमा अधिक है (मुझे विश्वास है कि यह MSDN द्वारा बताए गए 2,048 है)।


सी रन-टाइम पुस्तकालयों में फ़ाइलों की संख्या के लिए 512 सीमा होती है जो किसी भी समय खुली हो सकती हैं। फ़ाइल डिस्क्रिप्टर या फ़ाइल स्ट्रीम की अधिकतम संख्या से अधिक खोलने का प्रयास प्रोग्राम विफलता का कारण बनता है। इस नंबर को बदलने के लिए _setmaxstdio का उपयोग करें। इसके बारे में अधिक जानकारी here पढ़ी जा सकती here

आपको यह भी जांचना पड़ सकता है कि विंडोज़ का आपका संस्करण ऊपरी सीमा का समर्थन करता है जिसे आप _setmaxstdio साथ सेट करने का प्रयास कर रहे हैं। _setmaxstdio पर अधिक जानकारी के लिए here जांचें

वीएस 2015 से संबंधित विषय पर जानकारी here पाई जा सकती here






windows