文件呢是进程创建的信息逻辑单元. 一个磁盘上有成千甚至几百万的文件, 每一个文件之间相互独立, 唯一不同的是文件时是对磁盘的建模. 进程可以读取一个已经存在的文件, 并且也可以在需要的时候创建文件. 存储在文件中的信息必须是永久的, 不能因为进程的创建而终止或者受到影响. 在操作系统中处理文件的部分叫做文件系统.
文件命名
文件是一种抽象机制, 它提供了在磁盘上保存信息而且方便以后读取的方法.
文件的命名规则在不同的系统中各不相同. 在进程创建文件的时候, 进程会给文件进行命名, 当进程终止时, 该文件依然存在, 其他进程仍然可以访问它.
文件结构
文件的结构可分为字节序列, 记录序列以及数结构.
文件类型
字符类型, 块特殊文件, 目录文件, 字符文件, 链接文件等等.
文件的访问
顺序文件访问, 随机文件访问
文件属性
文件的大小, 文件创建时间, 文件修改时间, 创建者, 拥有者等都属于文件属性, 也叫做元数据
文件操作
#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
#include<fcntl.h>
#include<sys/stat.h>
#include<sys/types.h>
#define BUF_SIZE 4096
#define OUTPUT_MODE 0700
int main(int argc, char* argv[])
{
int in_fd, out_fd, rd_count, wt_count;
char buffer[BUF_SIZE];
if(argc != 3)
{
exit(1);
}
in_fd = open(argv[1], O_RDONLY);
if(in_fd < 0)
{
perror("open");
exit(1);
}
out_fd = creat(argv[2], OUTPUT_MODE);
if(out_fd < 0)
{
perror("creat");
exit(1);
}
while(1)
{
rd_count = read(in_fd, buffer, BUF_SIZE);
if(rd_count <= 0)
{
break;
}
wt_count = write(out_fd, buffer, rd_count);
if(wt_count <= 0)
{
perror("write");
exit(1);
}
}
close(in_fd);
close(out_fd);
if(rd_count < 0)
{
perror("read");
exit(1);
}
return 0;
}
目录
1. 一级目录
在一个目录中包括了所有的文件, 即根目录
2. 层次目录系统
以目录数的形式将文件一级目录有分成好多的目录, 每个目录下也可以继续再创建目录.
文件系统的实现
文件系统存放在磁盘上. 多数磁盘被分成一个或者多个分区, 每一个分区都有自己独立的文件系统. 磁盘的 0 号扇区称为主引导记录, 用来引导计算机. 在引导记录的末尾记录了有一个分区表, 分区表记录了每一个分区的起始地址以及每一个分区的结束地址. 其中在引导表中有一个分区叫做活动分区. 在计算机被引导时, 它先读入主引导记录, 主引导记录做的第一件事就是确定活动分区, 将活动分区读入它的第一个块, 即引导块, 并执行之. 引导块中的程序将装载自己分区的操作系统. 为了方便起见, 每一个分区都以一个引导块开始. 引导块后面是一个超级块, 包含了该文件系统中的所有文件参数信息. 在文件系统被启动的时候, 超级块会被读入首次读入内存. 超级块主要记录文件系统中快的数量以及其他管理信息.在超级块的后面是一个空闲块的信息. 可以以指针或者位图的形式给出. 紧接着是一组 i 结点, 是一个数据结构数组, 它说明了文件的方方面面, 下来是根目录, 以及其他文件目录