C 常用函数集

本文详细介绍了C语言中文件操作的基础知识,包括feof函数用于检测文件结束、fseek函数用于设定文件读写位置、ftell函数获取当前读写位置、fread函数与fwrite函数用于数据读写等。通过示例程序帮助理解这些函数的具体使用方法。
   函数名: feof
  功 能: 检测流上的文件结束符
  用 法: int feof(FILE *stream);
  程序例:
  #include <stdio.h>
  int main(void)
  {
             FILE *stream;
             /* open a file for reading */
             stream = fopen("DUMMY.FIL", "r");
             /* read a character from the file */
             fgetc(stream);
             /* check for EOF */
             if (feof(stream))
               printf("We have reached end-of-file\n");
             /* close the file */
             fclose(stream);
  return 0;
  }
  feof(fp)有两个返回值:如果遇到文件结束,函数feof(fp)的值为1,否则为0。
  EOF是文件结束标志的文件。在文本文件中,数据是以字符的ASCⅡ代码值的形式存放,ASCⅡ代码的范围是0到255,不可能出现-1,因此可以用EOF作为文件结束标志。
  当把数据以二进制形式存放到文件中时,就会有-1值的出现,因此不能采用EOF作为二进制文件的结束标志。为解决这一个问题,ASCI C提供一个feof函数,用来判断文件是否结束。feof函数既可用以判断二进制文件又可用以判断文本文件。
  “C”语言的“feof()”函数和数据库中“eof()”函数的运做是完全不同的。数据库中“eof()”函数读取当前指针的位置,“C”语言的“feof()”函数返回的是最后一次“读操作的内容”。多年来把“位置和内容”相混,从而造成了对这一概念的似是而非。
  那么,位置和内容到底有何不同呢?举个简单的例子,比如有人说“你走到火车的最后一节车箱”这就是位置。而如果说“请你一直向后走,摸到铁轨结果”这就是内容。也就是说用内容来判断会“多走一节”。这就是完全依赖于“while(!feof(FP)){...}”进行文件复制时,目标文档总会比源文档“多出一些”的原因。

  在“C”文件读取操作时不能完全依赖于“while(!feof(FP)){...}”的判断。

 

fseek函数是 用来设定文件的当前读写位置.

函数原型: int fseek(FILE *fp,long offset,int origin);

函数功能:把fp的文件读写位置指针移到指定的位置.

fseek(fp,20,SEEK_SET); 意思是把fp文件读写位置指针从文件开始后移20个字节.

第一个参数fp为文件指针
第二个参数offset为偏移量,整数表示正向偏移,负数表示负向偏移
第三个参数origin设定从文件的哪里开始偏移,可能取值为:SEEK_CUR、 SEEK_END 或 SEEK_SET
SEEK_CUR: 当前位置
SEEK_END: 文件结尾
SEEK_SET: 文件开头
其中SEEK_CUR,SEEK_END和SEEK_SET依次为1,2和0



ftell函数是用来获取文件的当前读写位置;

函数原型: long ftell(FILE *fp)

函数功能:得到流式文件的当前读写位置,其返回值是当前读写位置偏离文件头部的字节数.

ban=ftell(fp); 是获取fp指定的文件的当前读写位置,并将其值传给变量ban.


fseek函数与ftell函数综合应用:
分析:可以用fseek函数把位置指针移到文件尾,再用ftell函数获得这时位置指针距文件头的字节数,这个字节数就是文件的长度.


#include

main()

{

  FILE *fp;
  char filename[80];
  long length; printf("输入文件名:");
  gets(filename);


  //以二进制读文件方式打开文件
  fp=fopen(filename,"rb");
  if(fp==NULL)
  printf("file not found! ");
  else
  {
    //把文件的位置指针移到文件尾
    fseek(fp,OL,SEEK_END);

    //获取文件长度;
    length=ftell(fp);
    printf("该文件的长度为%1d字节 ",length);
    fclose(fp);
  }
}


    int fread(void *ptr, int size, int nitems, FILE *fp)
 参 数:
      用于接收数据的地址(字符型指针)(ptr)
  单个元素的大小(size)
  元素个数(nitems)
  提供数据的文件指针(fp)
  返回值:成功读取的元素个数

   格式:fwrite(buffer,size,count,fp);
  (1)buffer:是一个指针,对fwrite来说,是要输出数据的地址。
  (2)size:要写入的字节数;
  (3)count:要进行写入size字节的数据项的个数;
  (4)fp:目标文件指针。
  说明:写入到文件的哪里? 这个与文件的打开模式有关,如果是r+,则是从file pointer指向的地址开始写,替换掉之后的内容,文件的长度可以不变;如果是a+,则从文件的末尾开始添加,文件长度加大,而且fseek函数对此函数没有作用。

  程序例:
  #include <string.h>
  #include <stdio.h>
  int main(void)
  {
            FILE *fp;
            char msg[] = "this is a test";
            char buf[20];
            if (NULL == (fp = fopen("DUMMY.FIL", "w+")))
      {
               fprintf(stderr, "Cannot open output file./n");
               return 1;
            }   
            fwrite(msg, strlen(msg)+1, 1, fp); /* write some data to the file */
   
            fseek(fp, 0, SEEK_SET); /* seek to the beginning of the file */
  
            fread(buf, strlen(msg)+1, 1,fp); /* read the data and display it */
            printf("%s/n", buf);
 
           fclose(fp);
           return 0;
  }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值