【发布时间】:2015-04-06 11:54:01
【问题描述】:
对于一个作业,我应该创建两个方法:方法一将read() 和write() 输入文件到一个空的输出文件,一次一个字节(慢慢地)。
另一种方法将改为使用char buf[BUFSIZ];,其中BUFSIZ 来自<stdio.h>。我们应该将read() 和write() 与BUFSIZ 联系起来,这将使事情变得更快。
我们测试每个方法的输入文件只是一个 linux 字典 (/dict/linux.words)。
我已经正确实现了方法一,我一次调用一个字符read() 和write(),将输入文件复制到输出文件。虽然速度很慢,但至少会复制所有内容。
我的代码如下所示:
// assume we have a valid, opened fd_in and fd_out file.
char buf;
while(read(fd_in, buf, 1) != 0)
write(fd_out, buf, 1);
但是,对于方法二,我使用BUFSIZ,我无法将每个条目都传输到输出文件中。它在 z 条目中失败,并且不再写入。
所以,我的第一次尝试:
// assume we have a valid, opened fd_in and fd_out file
char buf[BUFSIZ];
while(read(fd_in, buf, BUFSIZ) != 0)
write(fd_out, buf, BUFSIZ);
没用。
我知道read() 将返回读取的字节数,如果它位于文件末尾,则返回 0。我遇到的问题是了解如何将read() 与BUFSIZ 进行比较,然后循环并从停止的位置开始read(),直到我到达文件的真正末尾。
【问题讨论】:
-
...
result = read(..); if (result < BUFSIZ) ..似乎有些明显。 -
@Jongware 现在可以了:/ 因为期中考试/项目,我已经睡了两天了,所以我的大脑很煎熬 :(