在这里,让我修复这些功能:
size_t fread_buf( void* ptr, size_t size, FILE* stream)
{
return fread( ptr, 1, size, stream);
}
size_t fwrite_buf( void const* ptr, size_t size, FILE* stream)
{
return fwrite( ptr, 1, size, stream);
}
至于fread()
/ 的参数的基本原理fwrite()
,我很早以前就丢失了K&R的副本,因此只能猜测。我认为一个可能的答案是,Kernighan和Ritchie可能只是认为,执行二进制I / O将最自然地在对象数组上完成。同样,他们可能认为块I / O在某些架构上执行起来更快或更容易。
尽管C标准规定,fread()
并fwrite()
在以下方面来实现fgetc()
和fputc()
,记住标准应运而生下通过K&R和标准规定的威力没有的东西一直在原设计者思路确定后不久。甚至可能K&R的“ C编程语言”中所说的内容可能与最初设计该语言时的含义不同。
最后,这是PJ Plauger fread()
在“标准C库”中必须说的话:
如果size
(第二个)参数大于一个,则无法确定该函数是否还读取size - 1
超出其报告内容的其他字符。通常,最好fread(buf, 1, size * n, stream);
不要以代替
fread(buf, size, n, stream);
基本上,他是说fread()
的接口已损坏。对于fwrite()
他指出,“写错误一般都是罕见的,所以这不是一个主要的缺点” -我不会同意的声明。