fread\fwrite、fseek /tell/rewind和缓冲区(20250215)

fread\fwrite

1. fread

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

  • ptr -- 这是指向带有最小尺寸 size*nmemb 字节的内存块的指针。
  • size -- 这是要读取的每个元素的大小,以字节为单位。
  • nmemb -- 这是元素的个数,每个元素的大小为 size 字节。
  • stream -- 这是指向 FILE 对象的指针,该 FILE 对象指定了一个输入流。

成功读取的元素总数会以 size_t 对象返回,size_t 对象是一个整型数据类型。如果总数与 nmemb 参数不同,则可能发生了一个错误或者到达了文件末尾。

2. fwrite

size_t fwrite( const void *buffer, size_t size, size_t count, FILE *stream );

  • buuffer -- 指向要写入的数据的指针
  • size -- 项大小(以字节为单位)
  • count -- 要写入的项的最大数量
  • stream -- 指向 FILE 结构的指针

 fwrite 返回函数写入的完整项的数量;如果发生错误,该数量可能小于 count。 此外,如果发生错误,无法确定文件位置指示器。 如果 stream 或 buffer 是空指针,或者如果在 Unicode 模式下指定了要写入的奇数个字节,函数会调用无效的参数处理程序,如参数验证中所述。 如果允许执行继续,则该函数将 errno 设置为 EINVAL 并返回 0。

fseek /tell/rewind

1. fseek

int fseek(FILE *stream, long int offset, int whence)
  • stream -- 这是指向 FILE 对象的指针,该 FILE 对象标识了流。
  • offset -- 这是相对 whence 的偏移量,以字节为单位。
  • whence -- 这是表示开始添加偏移 offset 的位置。它一般指定为下列常量之一:
SEEK_SET:文件的开头
SEEK_CUR:文件指针的所在位置
SEEK_END:文件的末尾

 如果成功,则该函数返回零,否则返回非零值。

2. ftell

long ftell( FILE *stream ); __int64 _ftelli64( FILE *stream );

stream:文件流指针

函数成功获取到文件指针的当前位置时,会返回一个非负long int值,这个值精确地反映了文件指针聚集文件起始位置的字节数。否则返回-1;

3. rewind

void rewind(FILE *stream) 
  • stream -- 这是指向 FILE 对象的指针,该 FILE 对象标识了流。 

缓冲区

1. 行缓冲(1K)

人机交互(stdout)

1. '\n'刷新

2. 缓冲区满

3. 程序结束

4. fflush函数       

2. 全缓冲(4K)

文件的读写

1. 缓冲区满

2. 程序结束

3. fflush函数       

3. 无缓冲(0K)

主要用于出错信息的输出stdrr,不对数据缓存直接刷新

你可能感兴趣的:(算法)