繁体   English   中英

在Linux中用C打印最后5行文件

[英]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) ,因为ccharchar总是1字节长。 同样,您应该始终检查read的返回值,但您永远不知道系统中什么时候出现问题以及由于read出错而导致程序崩溃。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM