C文件

来源:互联网 发布:阿里云服务器攻击 编辑:程序博客网 时间:2024/05/22 17:01

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

 

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

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
原创粉丝点击