我非常堅持一個單一的問題,我需要一個線程一個接一個地打印文件的行。這是代碼:亂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通過了行了,我怎麼可以打印一行一行被同一線程讀取器?
如果你所要做的只是逐行打印行,你爲什麼要使用'pthread'?我很確定,如果你產生了一堆線程,而每個線程的工作是打印一行,那麼一些線程將會「無序」地完成執行。 – APerson
如果您沒有將相同的行緩衝區傳遞給它們,它會有所幫助。想一想 - 如果你啓動線程,然後你將下一行讀入同一個緩衝區,那麼線程調用'printf'? – immibis
我只是工作的一部分,但主體是通過線程傳遞給另一個線程。 – StAx