13文件操作 计算机领域中的文件,这个概念是复杂的,但是也简单的,同现实世界中的文件不一样,但从理论意义上应该差不多。计算机中文件就是一些相关数据的有序集合。这个数据集合有一个名称叫文件名。而以文件及文件系统管理的数据都是都以磁盘、光盘、移动硬盘等介质保存的,只有在使用时,才调入内存参与CPU计算,因此文件作为数据的集合体,其保存的数据区别于内存驻留的数据的不同,就是它是常时间保存的。通常操作系统都有专门的文件系统来管理文件,并且为了读写效率考虑,通常的操作系统都会在内存与文件之间设计缓冲区(驻留在Cache区)。如下图所示:

C语言基本概念(8)_集合体

不同的操作系统对文件有许多不同的分类,取决于不同的文件系统管理。从数据的角度来说,一个文件存储在硬盘的形式都是二进制,但是用二进制表示的内容,还是有一点区别,在于这个内容是否是ASCII编辑,比喻说10000D在内存中如何存储,取决于你想怎么存储,一种以文本形式以ASCII码,先对10000D进行编辑转换成二进制代码,再存储,另一种将这个数据看成一种值的形式,用二进制直接表示十进制值。如下图所示:

C语言基本概念(8)_C语言_02

通常的应用开发过程中生成的EXE文件、目标文件等都是二进制文件,而汇编文件、代码文件都是文体文件。文本文件便于查看。从操作系统的角度来说,文件系统有缓冲文件系统和非缓冲文件系统,这个取决于操作系统和语言所使用的底层文件库,C和UNIX都是缓冲文件系统。但实际上这是由底层来决定的,上层C应用实际上是不会注意到的。

文件在C语言中是由底层库函数实现,也放在<stdio.h>中,常用的是FILE结构体变量。可以声明一个FILE *fp的结构体指针,也可以声明一个FILE f[5]的结构体变量

C语言基本概念(8)_内存_03

C语言提供了两个基本操作函数,打开和关闭,打开用fopen关闭用fclose.

函数格式  FILE *fp; fp = fopen(含路径文件名,打开方式) fclose(fp) ,成功0,不成功前面是NULL,后面是EOF(-1)

C语言基本概念(8)_管理_04

其中每种格式如下:

【1】字符读写函数

    fputc(ch,fp) 将字符输出到fp指向的文件中去, 返回写入的字符或者失败标志EOF

    ch =fgetc(fp), 从打开的一个文件中读取一个字符并送入ch中,文件必须是可读的。读取一个文本文件的结束符是EOF,二进制文件是FEOF

      while(ch!=EOF) //while(!feof(fp)

        {

            putchar(ch);

            ch=fgetc(fp);

          }

         C语言基本概念(8)_集合体_05

【2】字符串输入输出函数

    fgets(str,n,fp)从fp所指的文件中读出n-1个字符送入字符串数组中,因为最后一个为”\0”,返回的为数组首地址

    fputs(“sina.com”,fp),将字符串输入到fp指定的文件中。成功返回0,失败返回EOF

C语言基本概念(8)_管理_06

【3】数据块读写函数

fread(buffer,size,count,fp) fwrite(buffer,size,count,fp)

其中buffer是一个指针,fread是读入数据的存放地址,fwrite是输出数据的地址,size是要读写的字节数,count是要进行读写多少个size字节的数据项

C语言基本概念(8)_C语言_07

【4】格式化读写函数fprintf()和fscanf()

   fprintf(文件指针,格式化字符串,输出表列);从磁盘文件中按格式读入字符

   fscanf(文件指针,格式化字符串,输入表列) 从磁盘文件中按格式输入字符

【5】文件偏移指针fseek

      fseek(文件类型指针,位移量,起始点) 起始点0表示开头,1表示当前位置,2表示尾部.

C语言基本概念(8)_集合体_08

【6】文件当前位置指针ftell

    ftell(fp) 得到流式文件中的当前位置,相对于文件头的偏移量表示。出错-1L

【7】文件出错检测ferror,clearerrr()用来清除文件出错标志。

      ferror(fp),返回0表示未出错,返回非0表示出错,

14.位运算是指按二进制位进行的运算,这种运算的参与运算量是数值或字符,运算符是位运算符。

C语言基本概念(8)_操作系统_09

&,与操作,两个二进制均为1时结果为1,其余均为0,如3&8=1

| 或操作,只要一个为1,则结果为1,

^ 异或操作,两者同为0,异为1,如0^0=0 0^1=1 1^0=1 1^1=0

~取反操作,单目,如0则~0为1

左移与右移比较好理解,但是需要注意,在哪个方向补0,在哪个方向保留符号位。取决于操作系统。