Вы помните, чтобы 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 обычно определяет количество файловых дескрипторов, которые вы можете открыть одновременно. Это число обычно будет намного меньше, чем может предоставить операционная система. Чтобы использовать предоставляемые ОС дескрипторы файлов, вам нужно будет использовать функции Win32 / Win64 API:
- CreateFile
- ReadFile
- WriteFile
- GetFileSize
- CloseHandle
Операционные файловые дескрипторы имеют тип HANDLE, а не FILE *