fread和fseek的用法

原味:http://baike.baidu.com/view/656696.htm

     http://baike.baidu.com/view/656689.htm

fread   功 能: 从一个流中读数据   函数原型: size_t fread( void *buffer, size_t size, size_t count, FILE *stream );    参 数:   1.用于接收数据的地址(指针)(buffer)   2.单个元素的大小(size) :单位是字节而不是位,例如读取一个整型数就是2个字节   3.元素个数(count)   4.提供数据的文件指针(stream)   返回值:成功读取的元素个数

程序例

#include <stdio.h>

int main(void)
{
    FILE *stream;
    char msg[] = "this is a test";
    char buf[20];
    if ((stream = fopen("DUMMY.FIL","w+")) == NULL )
    {
        fprintf(stderr,"Cannot open output file.\n");
        return 1;
    }
    fwrite(msg,strlen(msg)+1,1,stream);
    fseek(stream,0,SEEK_SET);
    fread(buf,strlen(msg)+1,1,stream);
    printf("%s\n",buf);
    fclose(stream);
    return 0;
}

fseek

目录

功 能
用 法
描 述
返回值
程序例
注意事项

功 能

重定位流(数据流/文件)上的文件内部位置指针   注意:不是定位文件指针,文件指针指向文件/流。位置指针指向文件内部的字节位置,随着文件的读取会移动,文件指针如果不重新赋值将不会改变指向别的文件。

 用 法

int fseek(FILE *stream, long offset, int fromwhere);

 描 述

函数设置文件指针stream的位置。如果执行成功,stream将指向以fromwhere(偏移起始位置:文件头0,当前位置1,文件尾2)为基 准,偏移offset(指针偏移量)个字节的位置。如果执行失败(比如offset超过文件自身大小),则不改变stream指向的位置。

返回值

成功,返回0,否则返回其他值。   

fseek position the file(文件) position(位置) pointer(指针) for the file referenced by stream to the byte location calculated by offset.

int fseek( FILE *stream, long offset, int origin );
  第一个参数stream为文件指针
  第二个参数offset为偏移量,正数表示正向偏移,负数表示负向偏移
  第三个参数origin设定从文件的哪里开始偏移,可能取值为:SEEK_CUR、 SEEK_END 或 SEEK_SET
  SEEK_SET: 文件开头
  SEEK_CUR: 当前位置
  SEEK_END: 文件结尾
  其中SEEK_SET,SEEK_CUR和SEEK_END依次为0,1和2.
  简言之:
  fseek(fp,100L,0);把文件内部指针移动到离文件开头100字节处;
  fseek(fp,100L,1);把文件内部指针移动到离文件当前位置100字节处;
  fseek(fp,-100L,2);把文件内部指针退回到离文件结尾100字节处。

转载于:https://www.cnblogs.com/Ph-one/p/9812173.html

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
`fread` 函数是 C 语言中用于从文件中读取数据的函数,其函数原型如下: ```c size_t fread(void *ptr, size_t size, size_t count, FILE *stream); ``` 其中,参数含义如下: - `ptr`:指向存储读取数据的缓冲区的指针。 - `size`:每个数据项的大小,以字节为单位。 - `count`:要读取的数据项的数量。 - `stream`:指向 FILE 类型结构体的指针,表示要读取数据的文件。 `fread` 函数的返回值为实际读取的数据项数量,如果该数量与 `count` 参数不同,则可能表示到达了文件的结尾或者读取错误。 使用 `fread` 函数时,需要注意以下几点: - 每个数据项的大小和数量必须是正整数。 - 缓冲区 `ptr` 的大小应当足够存储 `size * count` 个字节,否则可能会导致缓冲区溢出。 - `fread` 函数在读取数据时可能会因为文件结尾或者读取错误而读取到比 `count` 参数所指定的数据项数量少的数据项,因此需要根据返回值判断实际读取的数据项数量。 下面是一个使用 `fread` 函数读取二进制文件的示例代码: ```c #include <stdio.h> #include <stdlib.h> int main() { FILE *fp; char *buffer; long file_size; fp = fopen("data.bin", "rb"); if (!fp) { printf("Failed to open file!\n"); exit(1); } // 获取文件大小 fseek(fp, 0, SEEK_END); file_size = ftell(fp); rewind(fp); // 分配缓冲区 buffer = (char*)malloc(sizeof(char) * file_size); if (!buffer) { printf("Failed to allocate memory!\n"); exit(2); } // 读取文件 if (fread(buffer, file_size, 1, fp) != 1) { printf("Failed to read file!\n"); exit(3); } // TODO: 处理数据 // 关闭文件和释放缓冲区 fclose(fp); free(buffer); return 0; } ``` 以上代码中,我们首先打开了一个名为 `data.bin` 的二进制文件,然后使用 `fseek` 和 `ftell` 函数获取了文件的大小,并分配了一个足够大的缓冲区,最后使用 `fread` 函数从文件中读取数据,读取的数据存储在缓冲区中,然后我们可以对读取到的数据进行处理。最后,我们需要关闭文件并释放缓冲区。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值