LINUX.ORG.RU

Потоки


0

1

Я столкнулся с проблемой, что внутри функции потока некоторые файлы не закрываются и в дальнейшем я получая ошибку «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;
}

Программа ищет количество совпадающих байтов в файле с заданной последовательностью. Потоки запускаются на всех файлах в заданном каталоге.

iwsyhgia ()

Ты не в том разделе форума запостил, тебе надо в development.

normann ★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.