我正在尝试读取包含1024行的文件,每行具有9倍相同的字母,如果找到的行与此条件不匹配,则返回该文件。
该文件如下,但具有1024行:
eeeeeeeee
eeeeeeeee
eeeeeeeee
代码:
fd = open(fileName, O_RDONLY);
lseek(fd,0,SEEK_SET);
if(flock(fd, LOCK_SH) == -1)
perror("error on file lock");
if(fd != 0){
read(fd, lineFromFile, (sizeof(char)*10));
arguments->charRead = lineFromFile[0];
for(i=0; i < 1024; i++){
var = read(fd, toReadFromFile, (sizeof(char)*10));
if(strncmp(toReadFromFile,lineFromFile,10) != 0 || var < 10){
arguments->result = -1;
printf("%s \n\n",toReadFromFile);
printf("%s \n",lineFromFile);
printf("i %d var %d \n",i,var);
free(toReadFromFile);
free(lineFromFile);
return ;
}
}
}
输出:
> eeeee
eeee
eeeee
eeee
i 954 var 6
我有5个不同的文件,每个文件都有不同的字母,并且每个字母在该特定行(954)中都提供此输出,并且该行是正确的,该字母写了9次,最后带有\ n。
任何想法为什么会发生这种情况?如果我不使用lseek,它可以正常工作,但是我需要lseek将文件分为几个部分,以通过不同的线程进行测试。为了简化起见,我将0索引放在lseek中以示大家。
谢谢。
看起来您正在寻找"eeeee\neeee"
而不是"eeeeeeeee\n"
。这意味着您的文件应该这样开始:
eeeee
eeeeeeeee
eeeeeeeee
像这样结束:
eeeeeeeee
eeee
如果文件以这种方式结束:
eeeeeeeee
eeeeeeeee
然后,当您到达最后一行时,它将失败,因为您只会读取"eeeee\n"
而不是"eeeee\neeee"
。
鉴于您评论中的新信息,我相信问题是您不应该寻求中间的问题(在本例中为342和684)。您应该寻求预期字符串的偶数倍(例如340和680)。同样,第954行也不是问题发生的地方。它应该是954 + X行,其中X是您要搜索的行。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句