2015-12-22 2 views
-1

Я очень застрял в одной проблеме, мне нужна строка файла prinft один за другим, чтобы один поток. Это код:Prinft line by line of file single thread C

#include <stdio.h> 
    #include <stdlib.h> 
    #include <pthread.h> 
    #include <string.h> 
    /* Prototypes */ 

    pthread_t reader; 

    void *readLine(void *line) 
    { 
     printf("Thread: %s \n",(char*)line); 
     pthread_exit(NULL); 
    } 

    int main(int argc, char *argv[]) 
    { 
     FILE * fp; 
     char * line = NULL; 
     size_t len = 0; 
     ssize_t read; 



     fp = fopen("texto.txt", "r"); 
     if (fp == NULL) 
      exit(EXIT_FAILURE); 



     while ((read = getline(&line, &len, fp)) != -1) { 

      if(pthread_create(&reader, NULL, readLine, (void *)line)) { 
        fprintf(stderr, "Error creating thread\n");   
      } 

     } 


     fclose(fp); 
     if (line) 
      free(line); 
     exit(EXIT_SUCCESS); 
    } 

Этот код выводит строки в расстройстве и не все нити печати линии, принятый Readline, как я могу напечатать линию по линии одним и тем же читателем потока?

+3

Почему вы используете 'pthread', если все, что вам нужно сделать, это напечатать строки один за другим? Я уверен, что если вы создадите кучу нитей, а каждое из них должно напечатать одну строку, некоторые из потоков завершат выполнение «не в порядке». – APerson

+0

Это поможет, если вы не передадите один и тот же буфер строк всем им. Подумайте об этом - что, если вы начнете поток, тогда вы прочтете следующую строку в тот же буфер, THEN поток вызывает 'printf'? – immibis

+0

Я всего лишь одна часть работы, но главным является прохождение линии по потоку в другие потоки. – StAx

ответ

2

В основном, используя независимые потоки, вы отправляете их все самостоятельно, и они могут передавать друг друга.

Представьте, что вы отправить двадцать людей независимо друг от друга, чтобы бежать в Starbucks и получить кофе - в зависимости от их движения и маршрут выбора, они будут прибывать в любой заказ, не повторяемые, а не в порядке, вы послали их.

Чтобы остаться в этом примере, просто отправьте одному парню, чтобы получить двадцать кофе, и у вас будет хорошо.

+0

* Представьте, что вы отправляете двадцать человек самостоятельно, чтобы бежать в Starbucks и получать кофе - в зависимости от их вождения и выбора маршрута, они прибудут в любом порядке, а не повторяемы, а не в том порядке, в котором вы их отправили. * И в этом случае , вы уезжаете, прежде чем они вернутся. –