如何正确设置fwrite()的大小和计数参数以编写一块字节
How to correctly set size and count parameters for fwrite() to write a chunk of bytes?
查看fwrite(const void * ptr, size_t size, size_t count, FILE * stream)
的规格,我不确定编写二进制数据时的size
参数和count
参数到底是什么,即字节的一部分。
我是否必须告诉fwrite到写bufLen
大小1 的块,还是应该告诉写1个大小 bufLen
的块?这些都更好吗?它如何影响返回的值?在发生错误的情况下,它如何影响行为?
如果我指定写一个大小 bufLen
的块,它始终写入完整的数据还是什么都没有?
在代码中,看起来像这样:
char* buf = ...;
int bufLen = ...;
FILE* file = ...;
/* alternative 1: */ int writtenByteCount = fwrite(buf, 1, bufLen, file);
/* alternative 2: */ int writtenByteCount = fwrite(buf, bufLen, 1, file);
printf("fwrite wrote %i of %i bytes/blocks", writtenByteCount, bufLen);
if (writtenByteCount < bufLen) {
// handle error
}
fwrite()
函数应从 ptr
指向的数组中写入 nitems
元素的大小由 size
指定为 stream
。
对于每个对象(nitems
次调用的CC_12次),应对fputc()
进行size
调用,从一个无符号char数组中取出值(按顺序),完全覆盖了对象。
只要基础写入被缓冲(大多数文件系统通常是这种情况),两种情况的性能差异就可以忽略不计。
流的文件位置指示器(如果定义)应通过成功编写的字节数来提出。如果发生错误,则未指定流的文件位置指示器的结果值。
当执行部分写入并返回fwrite()
时,两个变体的不同之处在于。然后,具有较小的size
和较大的nitems
在返回值中提供较高的粒度。
例如,如果仅编写5个字节(尝试编写10个字节),
// case 1
fwrite(bufptr, 1, 10, fptr);
// returns 5. As 5 out of 10 items written successfully
// case 2
fwrite(bufptr, 10, 1, fptr);
// returns 0. As 0 out of 1 item written
相关文章:
- 如何反转整数参数包
- 从不同线程使用int64的不同字节安全吗
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- 如何使用默认参数等选择模板专业化
- ReadFile() 读取的字节数少于其参数中的指定值
- 函数获取参数的变量列表并将它们转换为一系列字节?
- 获取C++模板参数包的总大小(以字节为单位)
- OPENCV错误:不良的参数(字节必须为16、32或64)在简介Descriptorextractorimpl中
- Valgrind 错误:系统调用参数 epoll_pwait(sigmask) 指向不可寻址的字节
- 如何正确设置fwrite()的大小和计数参数以编写一块字节
- SWIG-为具有四个参数的函数创建一个类型映射,该参数传递一个字节数组
- 从命令行输入参数为带 N 字节的十六进制
- 省略号函数参数的大小(以字节为单位)
- 有没有办法创建一个可以作为参数传递的 16 字节对齐类
- 如果将int传递给C中的字节参数,会发生什么
- Visual Studio 2008中命令行参数的2字节表示
- SWIG将const unsigned char example[]包装成Java字节[]作为参数
- 函数接受两个参数,一个字节和一个位字段,并返回字节中字段的值
- 如何在调用WindowsPhoneRuntimeComponent时使用字节数组作为参数
- 系统调用参数socketcall.recvfrom(buf)指向不可寻址字节