0

我需要用 C 编写一个程序,该程序通过使用诸如打开、读取、写入、关闭、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;
}

有谁能够帮我?我想我需要将这些字符存储在数组中,然后向后打印,但我不知道如何。

4

2 回答 2

1

为什么不计算回读到第五个换行符(调用它n)时读取的字符数,然后读取n字符?您不需要存储数据,它已经存储在文件中。

于 2014-10-22T11:34:41.443 回答
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是 a char,并且chars 总是 1 字节长。此外,您应该始终检查 的返回值read,您永远不知道系统何时出现问题以及程序因read出错而崩溃。

于 2014-10-22T11:35:34.883 回答