Я столкнулся с проблемой, что внутри функции потока некоторые файлы не закрываются и в дальнейшем я получая ошибку «Too many open files». Одновременно может работать от 10 потоков. Потоки не синхронизированы(но я так понимаю это не является причиной моей проблемы). С чем связано не закрытие некоторых файлов? Функция потока(считает количество совпадений байт в заданной последовательности в файле):
void *thread_function(void *arg) {
FILE *f;
struct thread_info *p = (struct thread_info*)arg;
if ((f = fopen(p->path, "rb")) != NULL) {
int i = 0, res = 0, count = 0;
char byte;
while (!feof(f)) {
++count;
fscanf(f, "%c", &byte);
if (byte == sequence[i]) ++i;
else i = 0;
if (i == strlen(sequence)) {
i = 0;
++res;
}
}
if (fclose(f) != 0) print_error(p->path);
printf("%lu %s %d %d %d\n", syscall (SYS_gettid), p->path, count, res, tread_list.size());
} else print_error(p->path);
p->number = 0;
}