У меня есть следующий код:чтение файл построчно с помощью Pthreads ... неожиданно завершает работу
/*//not important
FILE * INFILE;
list_file = optarg;
if((INFILE = fopen(list_file, "a+")) == NULL) {
fprintf(stderr, "Can't open input file\n");
exit(0);
}
*/
pthread_mutex_t input_queue;
pthread_mutex_init(&input_queue, NULL);
for(i = 0 ; i < number_thread; i++)
{
if(pthread_create(&thread_id[i], NULL, &work, NULL) != 0)
{
i--;
fprintf(stderr, RED "\nError in creating thread\n" NONE);
}
}
for(i = 0 ; i < number_thread; i++)
if(pthread_join(thread_id[i], NULL) != 0)
{
fprintf(stderr, RED "\nError in joining thread\n" NONE);
}
void * work(void * data)
{
unsigned long line;
char buf[512];
while (!feof(INFILE))
{
pthread_mutex_lock(&input_queue);
fgets((char *)&buf, sizeof(buf), INFILE);
if (buf[strlen (buf) - 1] == '\n')
buf[strlen (buf) - 1] = '\0';
line = (unsigned long)buf;
pthread_mutex_unlock(&input_queue);
do_work(line);
}
fclose(INFILE);
return NULL;
}
он читает строку из файла, но через некоторое время он неожиданно завершает работу, не сообщение об ошибке. Наверное, я что-то испортил.
Как я могу прочитать файл строки за строкой с помощью pthreads, но при этом сохранить как можно больше код без изменений (я имею в виду не испортить всю программу)?
'feof', вероятно, не работает так, как вы думаете. –
Зачем вам это делать? это не имеет смысла. –
, конечно, вот почему я спросил здесь, где так много экспертов. Я новичок – ShaMora