يمكن " الجهاز Namedpipe Win32pipes" تسبب معالجة "الكثير من الملفات المفتوحة"؟

StackOverflow https://stackoverflow.com/questions/2446600

  •  20-09-2019
  •  | 
  •  

سؤال

استمرار من هذا السؤال:

عندما أحاول أن أفعل fopen على Windows، أحصل على خطأ "الكثير من الملفات المفتوحة". حاولت تحليل، كم عدد الملفات المفتوحة التي لدي، ويبدو أنها ليست أكثر من اللازم.

ولكن عندما قمت بتنفيذ مستكشف العملية، لاحظت أن لدي العديد من مقابض مفتوحة مع أسماء مماثلة: " device namedpipe win32pipes.00000590.000000e2"، joy NamedPipe Win32pipes.00000590.0000E3 "، إلخ. أرى أن الرقم من هذه المقابض تساوي بالضبط عدد التكرارات التي تنفذ برنامجي، قبل إرجاع "العديد من الملفات المفتوحة" وتوقف.

أنا أبحث عن إجابة، ما هي هذه المقابض، ويمكن أن تسبب في الواقع خطأ "الكثير من الملفات المفتوحة"؟

في برنامجي، أقوم بتحميل الملفات من محرك بعيد، وأنا أقوم بإنشاء اتصالات TCP / IP. هل يمكن لأحد هذه العمليات إنشاء هذه المقابض؟

هل كانت مفيدة؟

المحلول

هل تتذكر fclose () أنبوبك في كل مرة من خلال التكرار؟ (انظر -> أدناه).

إن لم يكن أنت تسريب الأنابيب المفتوحة.

for(i = 0; i < lotsOfIterations; i++)
{
    FILE *fp;

    fp = fopen(filename[i], "r");
    if (fp != NULL)
    {
        ... do work, etc

        fclose(fp); // finished with this file handle (add this line!)
    }
}

ومع ذلك، إذا كانت نيتك تحتوي على الكثير من مقابض الملفات المفتوحة مرة واحدة، فإن الشيء الآخر الذي يجب أن يدركه هو أن وقت التشغيل C يحدد عادة عددا من مقابض الملفات التي يمكنك فتحها في أي وقت واحد. عادة ما يكون هذا الرقم أقل بكثير من نظام التشغيل قادر على توفيره. لاستخدام نظام التشغيل، قدمت ملفات الملفات التي ستحتاج إليها استخدام وظائف وظائف API Win32 / Win64:

  • إنشاء ملف
  • إقرا الملف
  • freepfile.
  • getfilesize.
  • closehandle.

توفر نظام التشغيل مقابض الملفات من النوع مقبض غير ملف *

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top