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

如何在C中使用读写过去的BUFSIZ,c,linux,file,system,stdio,C,Linux,File,System,Stdio,对于赋值,我应该创建两个方法:方法一将read()和write()将输入文件转换为空输出文件,每次一个字节(缓慢) 另一种方法将使用charbuf[BUFSIZ]其中BUFSIZ来自。我们应该使用BUFSIZ来read()和write(),这将使事情变得更快 我们测试每个方法的输入文件只是一个linux字典(/dict/linux.words) 我已经正确地实现了方法一,在方法一中,我一次调用一个字符的read()和write(),将输入文件复制到输出文件。虽然速度很慢,但它至少可以复制所有内容

对于赋值,我应该创建两个方法:方法一将
read()
write()
将输入文件转换为空输出文件,每次一个字节(缓慢)

另一种方法将使用
charbuf[BUFSIZ]
其中
BUFSIZ
来自
。我们应该使用
BUFSIZ
read()
write()
,这将使事情变得更快

我们测试每个方法的输入文件只是一个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);
但是,对于方法2,在使用
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的精确倍数,您需要检查实际读取的字节数,以便正确写入最后一个块,例如

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

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

char buf[BUFSIZ];
ssize_t n;
while((n = read(fd_in, buf, BUFSIZ)) > 0)
    write(fd_out, buf, n);
注意:我没有包括关闭输入/输出文件语句 但是,在每次调用exit()之前,确实需要添加它

注意:我没有包括关闭输入/输出文件语句
但是,在每次调用exit()之前,确实需要添加它

<代码>结果=读取(…);if(result似乎有点明显。@Jongware现在是:/因为期中考试/项目,我已经起床两天了,所以我的大脑非常紧张:(…
result=read(…);if(result
似乎有点明显。@Jongware现在是这样了:/因为期中考试/项目,我已经起床两天了,所以我的大脑非常紧张:(感谢您的帮助!这很有意义。请注意,您的文件可能是一个,在大多数情况下可能比BUFSIZ大,因此您必须执行多个操作。)reads@Pandrei:是的,这就是为什么读和写调用嵌入在while循环中。感谢您的帮助!这很有意义。请注意,您的文件在大多数c语言中都可以是ases可能比BUFSIZ大,因此您必须执行多个操作reads@Pandrei:是的,这就是为什么读和写调用嵌入到while循环中。