rewind函数

/* 
函数名: rewind
  功 能: 将文件内部的位置指针重新指向一个流(数据流/文件)的开头
  注意:不是文件指针而是文件内部的位置指针,随着对文件的读写文件的位置指针(指向当前读写字节)向后移动。而文件指针是指向整个文件,如果不重新赋值文件指针不会改变。 下面有FILE的结构体,rewind函数改变的是FILE结构体中的一个指针的指向。
  用 法: void rewind(FILE *stream);
  头文件:#include<stdio.h>
  返回值:无
*/

mingw中FILE结构体的定义
typedef struct _iobuf
{
char* _ptr;//当前读的指针
int _cnt;
char* _base;
int _flag;
int _file;
int _charbuf;
int _bufsiz;
char* _tmpfname;
} FILE;


linux中的FILE结构体的定义
typedef struct _IO_FILE FILE;
struct _IO_FILE {
int _flags; /* High-order word is _IO_MAGIC; rest is flags. */
#define _IO_file_flags _flags

/* The following pointers correspond to the C++ streambuf protocol. */
/* Note: Tk uses the _IO_read_ptr and _IO_read_end fields directly. */
char* _IO_read_ptr; /* Current read pointer当前读的指针 */
char* _IO_read_end; /* End of get area. */
……
……//太多了,其余成员省略
};

//使用rewind()函数将一个文件重复读10次
//注意:以下源代码的文件名必须为vir.c,否则生成的exe文件名就不是vir.exe了(除非使用gcc编译器指定文件名),否则(in=fopen("vir.exe","rb"))==NULL就为真了,程序将退出。
#include<stdio.h>
int main()
{
  int i;
  FILE *in,*out[10];//定义指向输入、输出文件的指针,in指向输入文件,即程序本身。out[10]是指针数组,每一个元素指向一个输出文件
  char *vir[10]={"vir0.exe","vir1.exe","vir2.exe","vir3.exe","vir4.exe",
  "vir5.exe","vir6.exe","vir7.exe","vir8.exe","vir9.exe"}; /*定义一组指针数组,每一个指针元素指向一个字符串的首地址,该字符串即输出文件的文件名*/
  if((in=fopen("vir.exe","rb"))==NULL) /*以二进制方式打开文件"vir.exe",如果出错就显示出错信息*/
  {
    printf("can't not open the infile");
    exit(0);
  }
  for(i=0;i<10;i++) /*依以二进制方式次打开十个要创建的文件,如果出错就显示出错信息*/
  {
    if((out[i]=fopen(vir[i],"wb"))==NULL)
    {
      printf("can't not open the %d outfile",i+1);
      exit(0);
    }
  }
  for(i=0;i<10;i++) /*依次将vir.exe的内容复制到输出文件上,即vir0.exe、vir1.exe.......等文件获得vir.exe的内容*/
  {
    while(!feof(in)) //while执行完,vir.exe文件的位置指针就指向了文件的结尾
    {
      fputc(fgetc(in),out[i]);
    }
    rewind(in);//重置vir.exe文件的位置指针,将vir.exe文件的位置指针指向文件开头
  }

  for(i=0;i<10;i++) /*关闭vir.0、vir1、vir2.....*/
  {
    fclose(out[i]);
  }
  //vir.exe的执行是一个进程,进程在内存中,而vir.exe文件在磁盘上
  fclose(in); /*关闭vir.exe文件,并不是关闭程序,程序执行完是执行到return 0;语句*/
  return 0;
}

 

posted @ 2021-06-13 12:00  hifish  阅读(15)  评论(0)    收藏  举报