繁体   English   中英

fread 和 fwrite 中的所有参数代表什么?

[英]What do all the parameters in fread and fwrite stand for?

我开始使用freadfwrite来通过 tcp 连接发送文件,我想知道函数的参数代表什么。 我试过阅读文档,但我不明白第二个参数(大小)和第三个参数(nmemb)之间的区别。 谁能描述每个参数的用途以及上述两个参数之间的区别? 谢谢。

谁能描述...上面提到的两个参数之间的区别?

size_t fread(void * restrict ptr, size_t size, size_t nmemb, FILE * restrict stream);

size是正在读取的单个元素的大小。 例如,当读取double精度时,大小将是sizeof(double)或通常为 8。

nmemb是要读取的最大元素数。

重要的是,返回值是读取的元素数,不一定是读取的字节数。


谁能描述每个参数的目的......?

ptr是 memory 中开始保存数据的位置。

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);
} 

<stdio.h>此处的文档)中定义的freadfwrite具有以下签名:

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);
  1. 它们都需要一个指向缓冲区的指针ptr ,其中包含必须复制数据的起始地址( fread )或从哪里复制( fwrite
  2. 他们都应该复制每个size字节的nmemb元素。 S 例如,如果您要复制 100 个字符的缓冲区

    fread(ptr, 1, 100, 文件指针);

因为char的大小是 1。在一般情况下,您要复制myType类型的 N 个元素

 fread( ptr, sizeof(myType), N, filePointer );

在这种情况下,将读取全部sizeof(myType) * N个字节。

  1. 它们需要通过成功调用fopen function(在此处描述)获得的指向文件 ( FILE * ) 的有效指针。

  2. 谈到它们的返回值,没有比链接文档中包含的描述更好的描述了:

成功时, fread()fwrite()返回读取或写入的项目数。 此数字等于仅当 size 为 1 时传输的字节数。如果发生错误或到达文件末尾,则返回值是一个短项计数(或零)。

因此,成功时,它最多会返回nmemb

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM