2015-12-22 84 views
-1

我非常堅持一個單一的問題,我需要一個線程一個接一個地打印文件的行。這是代碼:亂Prinft line by line of file單線程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

如果您沒有將相同的行緩衝區傳遞給它們,它會有所幫助。想一想 - 如果你啓動線程,然後你將下一行讀入同一個緩衝區,那麼線程調用'printf'? – immibis

+0

我只是工作的一部分,但主體是通過線程傳遞給另一個線程。 – StAx

回答

2

基本上,通過使用獨立的線程,您可以獨立發送所有這些線程,並且它們可能會相互傳遞。

想象一下,你送人民自主運行到星巴克喝杯咖啡 - 這取決於他們的駕駛和路線的選擇,他們將在到達任何順序,不可重複的,而不是在您發送的順序。

留在這個例子中,只需發送一個男人得到二十張咖啡,你會很好。

+0

*想象一下,你可以獨立派20個人前往星巴克並獲得一杯咖啡 - 根據他們的駕駛和路線選擇,他們將以任何順序到達,不可重複,而不是按照你發送給他們的順序。 ,你在他們回來之前開車。 –