C文件

文件:文件是存储在磁盘上的数据结合

 

分类:文本文件和二进制文件

1.        文本文件ASI文件文本文件一个文件存放一个ASIC字符,也就是一个字节

10000其实也是存放了5个字节的文件,这样的文件方便读取数据,但是这样的文件占的

外存空间比较大,而且在读取在内存中的时候需要将他转换成二进制文件,这样是比较耗费时间的

2.   二进制文件实际上存放的是文件在内存中存储样式,10000在tubc中只占两个字节,所以存储空间较少

所以,计算机中的文件一般都是使用二进制文件来存储的。

 

磁盘文件:一些数据放在磁盘文件里面需要的时候再输入到内存里面,所以就需要磁盘文件

 

操作系统对输入输出设备的管理是按照文件的方式来管理的,即输入文件和输出文件

 

文件缓存区:输入缓存区和输出缓存区

 

流:标准输入流、标准输出流、错误输出流

流的常用的输出方式有、行缓冲、无缓冲

行缓冲就是现将数据放在缓冲区内,等到输入指定的输出符的时候,数据开始输出到显示器。

就像scanf就是输出了换行的时候才表示输出结束一样

 

输出文件缓存区

程序数据区(内存)《-------------------》磁盘

                     输入文件缓存区

 

系统为每个文件设置了一个位置指针,所以文件指针不是指向了数据的地址,而是指向了文件的位置。

 

文件三个部分:文件路劲+文件名的主干+文件名的后缀

 

操作函数:

Fopen("filename","mode")  返回值是一个文件类型的指针

fgetc(FILE *fp) 返回值是文件中的一个字符

fgets(char *buff, int buff_size, FILE *fp)这个时候不需要再带上返回值

feof(FILE *fp)返回值是文件类型的指针,到了文件结束(文件流未EOF)的时候,指针指向空

fclose(FILE *fp)关闭文件,一般不会去使用它的返回值

fputc(char ch, FILE *fp)向文件里面写入一个字符

#include<stdio. h>
  #define FILE_NAME       "temp.c"
  
   int main(void)
   {
           FILE *fp;
           char ch;
  
          // Open file
          fp      = fopen(FILE_NAME, "r");
          if(fp==NULL){
                  perror("main");
                  return -1;
         }
 
          // Read char
          while(1){
                  ch      = fgetc(fp);
 
                  // End of file
                  if(feof(fp)){
                          break;
                  }
                  printf("%c", ch);
          }
 
          // Close file
          fclose(fp);
         return 0;
  }

值得一提的是我们为什么要将打印输出放在最后一步,feof是在fgets或者fgetc之后采取检测文件流是否标志FEOF

如果我们是在前面去检测他的话,那就会出现一个问题,那就是

最后一次读取之后,文件没有结束,buf缓冲区的内容为最后读取的数据,

然后再次进入循环,这个读取数据失败了,但是缓冲区里面的数据还是会输出出来,再下面判断失败才会跳出程序

也就是说这样的话,最后的一个数据会连续输出两次。

而对于fgetc,读取失败之后,他是则是直接返回了一个不可以打印的值,放在缓冲区里面



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值