Могут ли дескрипторы ”\Device amedPipe\\Win32Pipes“ вызывать ошибку ”Слишком много открытых файлов"?

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

  •  20-09-2019
  •  | 
  •  

Вопрос

Продолжая с этот вопрос:

Когда я пытаюсь выполнить fopen в Windows, я получаю сообщение об ошибке "Слишком много открытых файлов".Я попытался проанализировать, сколько у меня открытых файлов, и, похоже, не слишком много.

Но когда я запустил Process Explorer, я заметил, что у меня есть много открытых дескрипторов с похожими именами:"\Device amedPipe\Win32Pipes.00000590.000000e2", "\Device amedPipe\Win32Pipes.00000590.000000e3" и т.д.Я вижу, что количество этих дескрипторов в точности равно количеству итераций, которые выполнила моя программа, прежде чем она вернула "Слишком много открытых файлов" и остановилась.

Я ищу ответ, что это за дескрипторы, и могут ли они на самом деле вызвать ошибку "Слишком много открытых файлов"?

В моей программе я загружаю файлы с удаленного диска и создаю соединения 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:

  • Создать файл
  • Прочитанный файл
  • Файл для записи
  • Получить размер файла
  • Близкая рукоятка

Предоставленные ОПЕРАЦИОННОЙ системой дескрипторы файлов имеют тип HANDLE, а не FILE *

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top