嗨,我对以下问题有一个疑问:在由Thomas .Doeppner编写的操作系统教材“操作系统深度”中,一章练习问题要求我们找出错误的代码,以便向后读取文件内容,并要求找到更好的方法。现在,我遇到了很多方法来做到这一点,但我无法真正了解为什么下面的方法不被认为是一种很好的方法
感谢您的时间和帮助,谢谢!
#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;
}发布于 2016-07-19 23:21:32
代码中所示的方法效率低下,因为您对文件中的每个字节进行了3次系统调用。此外,您不检查read()和write()函数调用的返回值,也不检查文件是否已成功打开。
为了提高效率,您应该缓冲输入/输出操作。
putchar()而不是write()将更有效和更可靠。一如既往,对生成的代码进行基准测试,以衡量实际的性能改进。
https://stackoverflow.com/questions/38469995
复制相似问题