首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C:向后读取文件:为什么这种特定的方法被认为不是很好?

C:向后读取文件:为什么这种特定的方法被认为不是很好?
EN

Stack Overflow用户
提问于 2016-07-19 23:14:33
回答 1查看 92关注 0票数 0

嗨,我对以下问题有一个疑问:在由Thomas .Doeppner编写的操作系统教材“操作系统深度”中,一章练习问题要求我们找出错误的代码,以便向后读取文件内容,并要求找到更好的方法。现在,我遇到了很多方法来做到这一点,但我无法真正了解为什么下面的方法不被认为是一种很好的方法

感谢您的时间和帮助,谢谢!

代码语言:javascript
复制
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>

int main() {
    int fd;
    off_t fptr;
    fd = open("./file.txt", O_RDONLY);
    char buf[3];
    /* go to last char in file */
    fptr = lseek(fd, (off_t)-1, SEEK_END);
    while (fptr != -1) {
        read(fd, buf, 1);
        write(1, buf, 1);
        fptr = lseek(fd, (off_t)-2, SEEK_CUR);
    }
    return 0;
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-19 23:21:32

代码中所示的方法效率低下,因为您对文件中的每个字节进行了3次系统调用。此外,您不检查read()write()函数调用的返回值,也不检查文件是否已成功打开。

为了提高效率,您应该缓冲输入/输出操作。

  • 使用putchar()而不是write()将更有效和更可靠。
  • 一次读取一段文件内容(从几千字节到几兆字节)也会更有效。

一如既往,对生成的代码进行基准测试,以衡量实际的性能改进。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38469995

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档