文件目录和目录文件的作用区别和联系 & C语言文件相关操作 FILE用法

一.文件目录和目录文件的作用区别和联系

1.他们各自的概念和联系
文件目录:把所有的FCB组织在一起,就构成了文件目录,即文件控制块的有序集合
**FCB:**为了能对一个文件进行正确的存取,操作系统必须为文件设置用于描述和控制文件的数据结构,称之为“文件控制块(FCB)”。
**目录文件:**为了实现对文件目录的管理,通常将文件目录以文件的形式保持在外存,这个文件就叫目录文件。

二:C语言为什么要先open打开文件, 最后close关闭文件,为什么不直接read+文件名读文件

首先我们要先了解文件指针
文件指针是指向文件有关信息的指针, 这些信息包括:文件名状态当前位置, 他们保存在一个结构体中, 在使用时要先为他分配空间,用来存放相关的信息, 该结构体由系统定义, C语言规定该类型为FILE型

typedef struct
{
	short level;
	unsigned flags;
	char fd;
	unsigned char hold;
	short bsize;
	unsigned char *buffer;
	unsigned ar*curp;
	unsigned istemp;
	short tokenl;
}FILE;

在编写程序时不用将上面内容写出, 只需要写以下代码

FILE *fp;

打开文件的操作

FILE *fp;
fp = fopen(文件名, 使用方式);

即是

FILE *fp=fopen(char *filename,char *mode);
/*
filename:文件名,如“students.txt”。
mode:打开方式(读写方式,文件类型)
*/

文件关闭

fclose(FILE *fp)
一般,fclose(fp)应与fopen配对使用,特别是含有写方式的文件,若不关闭,可能会造成文件数据丢失。

配合文件指针可以进行一系列的操作
1.单字节输入输出 fgetc, fputc
2.字符串输入输出 fgets, fputs
3.格式化读写 fscanf, fprintf

ch = fprintf(文件类型指针, 格式化字符串, 输出列表);
例如:
fprintf(fp, "%d", i);
他的作用是将整型变量i以%d的格式输出到fp指向的文件中
相反
fscanf(fp, "%d", &i);
读入fp所指向文件中的i值

4 整块读写 fread fwrite

fread(buffer, size, count, fp);
从fp所指向的文件中读入count次, 每次读写size字节, 读入的信息存在buffer中

fwrite(buufer, size, count, fp);
将buffer的地址开始的信息输出count次, 每次写size字节到fp所指向的文件中

5.指针移动, 实现随机读取

#include 
int main()
{  
    FILE *fp;
    int c;
    fp=fopen("handsomehuang.txt","r");
    fgetc(fp);
    fgetc(fp);
    rewind(fp);//文件指针重置为0 
    printf("%c",fgetc(fp));
    fclose(fp);
}

检测文件是否读到末尾

#include 
int main()
{  
   FILE *fp;
   fp=fopen("handsomehuang.txt","r");
   while(!feof(fp))
   {   printf("%c",fgetc(fp));
   }
   fclose(fp);
}
/*
feof是C语言标准库函数,其原型在stdio.h中,其功能是检测流上的文件结束符,如果文件结束,则返回非0值,否则返回0(即,文件结束:返回非0值,文件未结束,返回0
*/

6.文件的定位 fseek函数

fseek(文件类型指针, 位移量, 起始点);

该函数的作用是移动文件内部的位置指针。其中,“ 文件类型指针”指向被移动的文件:“位移量”表示移动的字节数,要求位移量是long型数据,以便在文件长度大于64KB时不会出错。当用常量表示位移量时,要求加后缀 “L";“起始点”表示从何处开始计算位移量,规定的起始点有文件首、文件当前位置和文件尾3种
文件目录和目录文件的作用区别和联系 & C语言文件相关操作 FILE用法_第1张图片

fseek(fp,-20L,1);

表示将位置指针从当前位置向后退20个字节。

7.ftell函数

ftell函数的一般形式如下:
long ftell(文件类型指针);

该函数的作用是得到流式文件中的当前位置,用相对于文件开头的位移量来表示。当返回值是-1L 时, 表示出错

你可能感兴趣的:(操作系统)