我需要在C中编写一个程序,它通过使用open,read,write,close,lseek等基本函数打印出最后五行文件。到目前为止我的代码:
int main(int argc, char *argv[]){
int fd1=open(argv[1], O_RDONLY);
char c;
int currPos = lseek(fd1,-2,SEEK_END);
while(currPos != -1){
read(fd1,&c,sizeof(c));
currPos--;
currPos=lseek(fd1,currPos,SEEK_SET);
if (c == '\n'){
}
}
return 0;
}
任何人都可以帮助我吗?我想我需要将这些字符存储在数组中然后向后打印,但我不知道如何。
答案 0 :(得分:1)
为什么不在读回第五个换行符时调用读取的字符数(调用n
)然后读取n
个字符?您不需要存储数据,它已经存储在文件中。
答案 1 :(得分:1)
在if语句中,您可以计算从文件末尾遇到的'\n'
个字符数。当您遇到第6行结束时,您知道您位于第6行的末尾(假设最后一行还包含末尾的行尾字符),所以你只需从那一点打印到文件的末尾。
您不需要将字符保存在数组中,因为它们已保存在您的文件中。 你可以这样做(在你的while循环之后):
int i=read(fd1,&c,1);
while(i){
printf("%c",c);
i = read(fd1,&c,1);
}
它可能不是最有效的方法,但它应该可以解决问题。
注意:无需编写sizeof(c)
,因为c
是char
,char
s总是1个字节长。
此外,您应该始终检查read
的返回值,您永远不知道系统出现问题的时间,并且程序因read
出错而崩溃。