我开始使用 fread
和 fwrite
为了通过tcp连接发送文件,我想知道这些函数的参数代表什么。我试着阅读了文档,但我不明白第二个参数(size)和第三个参数(nmemb)之间的区别。谁能描述一下每个参数的用途,以及上述两个参数之间的区别?谢谢,我开始使用fread和fwrite。
谁能描述一下......上面提到的两个参数之间的区别?
size_t fread(void * restrict ptr, size_t size, size_t nmemb, FILE * restrict stream);
size
是指被读取的单个元素的大小。 例如:当读取一个 double
大小将是 sizeof(double)
或通常为8。
nmemb
是读取的最大元素数。
重要的是,返回值是读取的元素数,而不一定是读取的字节数。
谁能描述一下每个参数的用途......?
ptr
是内存中开始保存数据的位置。
stream
是在内存中开始保存数据的位置。FILE *
指针,通常是由 fopen()
.
示例用法
FILE *inf = fopen("data.bin", "rb");
if (inf) {
double data[N];
size_t n;
while ((n = fread(data, sizeof data[0], N, inf)) > 0) {
printf("Read %zu doubles, first one %g\n", n, data[0]);
}
fclose(inf);
}
fread
和 fwrite
,定义在 <stdio.h>
(文件 此处)有如下签名。
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *" stream );
size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);
ptr
,其中包含要复制数据的起始地址(fread
)或从哪里复制(fwrite
)他们两个都应该是抄袭 nmemb
元素 size
字节。例如,如果您要复制一个100个字符的缓冲区
fread( ptr, 1, 100, filePointer )。
因为一个 char
是1.在一般情况下,你要复制N个类型的元素。myType
fread( ptr, sizeof(myType), N, filePointer );
在这种情况下,完全 sizeof(myType) * N
字节将被读取。
它们需要一个有效的文件指针(FILE *
)获得的 成功 召唤 fopen
功能 此处).
谈到它们的返回值,a不能写出比链接文档中包含的更好的描述。
关于成功:
fread()
和fwrite()
归还 物品 读或写。只有当大小为1时,这个数字才等于传输的字节数,如果发生错误,或者到了文件的终点,返回值就是一个短项计数(或者零)。
所以,在成功时,它最多返回的是 nmemb
.