fseek fread c语言指针移动函数(转)

来源:互联网 发布:雷军不会英文编程 编辑:程序博客网 时间:2024/05/16 00:43
int fseek(FILE *stream, long offset, int fromwhere);fseek 用于二进制方式打开的文件,移动文件读写指针位置.
fseek(in,-1L,1);   -- 文件流in, 零点为当前指针位置,SEEK_CUR 就是 1,  -1L -- 文件指针回退1个字节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);把fp指针移动到离文件开头100字节处;
  fseek(fp,100L,1);把fp指针移动到离文件当前位置100字节处;

    fseek(fp,100L,2);把fp指针退回到离文件结尾100字节处。


fread

  功 能: 从一个流中读数据

  函数原型: size_tfread(void*buffer,size_tsize,size_tcount,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;

  }

  /* write some data to the file */

  fwrite(msg, strlen(msg)+1, 1, stream);

  /* seek to the beginning of the file */

  fseek(stream, 0, SEEK_SET);

  /* read the data and display it */

  fread(buf, strlen(msg)+1, 1,stream);

  printf("%s\n", buf);

  fclose(stream);

  return 0;

  }

fwrite:

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

返回值:返回实际写入的数据块数目

(1)buffer:是一个指针,对fwrite来说,是要获取数据的地址;
(2)size:要写入内容的单字节数;
(3)count:要进行写入size字节的数据项的个数;
(4)stream:目标文件指针;
(5)返回实际写入的数据项个数count
说明:写入到文件的哪里? 这个与文件的打开模式有关,如果是w+,则是从file pointer指向的地址开始写,替换掉之后的内容,文件的长度可以不变,stream的位置移动count个数;如果是a+,则从文件的末尾开始添加,文件长度加大。
fseek对此函数有作用,但是fwrite[1] 函数写到用户空间缓冲区,并未同步到文件中,所以修改后要将内存与文件同步可以用fflush(FILE *fp)函数同步。
示例程序:
#include<stdio.h>
#define SIZE 1
typedefstruct
{
    charname[10];
    intnum;
    intage;
    charaddr[15];
}student;
 
student stu[SIZE];
 
voidsave()
{
    FILE* fp;
    inti;
    if((fp=fopen("dat.txt","w"))==NULL)
    {
        printf("无法打开此文件!\n");
        return;
    }
    for(i=0;i<SIZE;i++)
    if(fwrite(&stu[i],sizeof(student), 1, fp) != 1)
    printf("文件写入错误。!\n");
    fclose(fp);
}
 
voidmain()
{
    inti;
    for(i=0;i<SIZE;i++)
        scanf("%s%d%d%s",&stu[i].name,&stu[i].num,&stu[i].age,&stu[i].addr);
    save();
}

参考:http://hi.baidu.com/wengjiang000/item/867ead5da7d95c10abf6d736

0 0