我知道我说过我会尝试自己解决这个问题,而我确实做到了,然后我先看了看别处,然后再次张贴在这里,但后来我却陷入了混乱:
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/types.h>
void partition_file(int n);
void *count_words(void *pos);
int total_count = 0;
int *seg_size = 0;
int main()
{
int file=0;
pthread_t tid;
if((file=open("Device-Driver.txt",O_RDONLY)) < -1)
return 1;
partition_file(8);
for (int i=0; i < 8; i++)
{
pthread_create(&tid, NULL, count_words, (void *) seg_size);
}
pthread_exit(NULL);
return 0;
}
void partition_file(int n)
{
int file=0;
file=open("Device-Driver.txt",O_RDONLY);
int size = lseek(file, 0, SEEK_END);
seg_size = size / n);
close(file);
}
void *count_words(void *pos)
{
int file=0;
int p = *((int *) pos);
char buffer[seg_size];
file=open("Device-Driver.txt",O_RDONLY);
lseek(file,p,SEEK_SET);
read(file,buffer,seg_size);
for(int i = 0; i < size; i++)
{
if(buffer[i] == " ") total_count +=1;
}
}
我应该如何最好地解决这个问题?特别是这些错误和警告:
seek仅移动读取指针。 将读取指针放在一个位置后,即可读取已读字符。
我认为在您的练习中,每个线程都必须具有自己的读取指针。
如果文件为800字节并分成8个字节: 线程1读取从0到99的字节, lseek(0,SEEK_SET),读取(文件,缓冲区,100),对缓冲区中的字计数...
线程2:lseek(100,SEEK_SET),读取(文件,缓冲区, 100),计数缓冲区中的单词...
线程3:lseek(200,SEEK_SET),读取(文件,缓冲区,100)计数缓冲区中的单词...
等等...
您不必创建临时文件
分享改善这个答案
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。