线程到多个搜索文件

时间:2013-11-10 09:18:32

标签: c file pthreads fseek

我打开文件:

FILE *fp = fopen("test.txt", "r");

文件如下所示:

cookie    
monster 
test
...

我创建了10个帖子pthread_create

每个线程都会在文件中查找一个字符串。我想将文件分成几个部分。

问题

我不想将整个文件读入内存,因为.txt文件会很大。 所以我的方法是寻求。所以我会给每个线程一定数量的行来搜索。

因此,Thread1获取第1行至第50行,Thread2获取第51行至第101行,而Thread3获取第102行至第152行。

我怎么说寻求第51行然后到第102行等?

  

fseek(fp,51,SEEK_SET); //不这样做

2 个答案:

答案 0 :(得分:4)

由于每条线的长度可能不同,因此如果不首先读取所有前面的行,就无法知道它在文件中的位置。因此,您需要在计算换行数时读取文件以了解每行的字节偏移量 - 如果您决定这样做,请在生成线程之前执行此操作,否则他们将复制此工作。

当然你可以改变行为,以便按字节而不是按行划分文件,并寻找给定的字节偏移量,然后从那里跳到下一个换行符(并允许具有前面字节范围的线程)超出其范围直到行尾,以确保分割线被覆盖。)

此外,您需要为每个线程赋予文件自己的句柄,否则一个线程中的操作将影响其他线程中的文件位置。

答案 1 :(得分:0)

每个线程都需要自己的文件句柄。根据线程ID和步幅,在每个线程中启动10个线程fopen,每个线程fseek