gpt4 book ai didi

c - 如何在 C 中使用读写过去的 BUFSIZ

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:36:47 24 4
gpt4 key购买 nike

对于一项作业,我应该创建两种方法:方法一是 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()在它停止的地方,直到我到达文件的真正结尾。

最佳答案

由于您的文件很可能不是 BUFSIZ 的精确倍数,您需要检查读取的实际字节数,以便正确写入最后一个 block ,例如

char buf[BUFSIZ];
ssize_t n;
while((n = read(fd_in, buf, BUFSIZ)) > 0)
write(fd_out, buf, n);

关于c - 如何在 C 中使用读写过去的 BUFSIZ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28364085/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com