[英]printing last 5 lines of file in C in Linux
我需要用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;
}
有谁能够帮助我? 我想我需要将这些字符存储在数组中,然后向后打印,但我不知道如何。
为什么不计算回读到第五个换行符(称为n
)然后读取n
字符时读取的字符数? 您不需要存储数据,它已经存储在文件中。
在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
总是1字节长。 同样,您应该始终检查read
的返回值,但您永远不知道系统中什么时候出现问题以及由于read
出错而导致程序崩溃。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.