文件系统

本文介绍了文件系统的基本概念,包括文件的命名规则、结构类型、访问方式及属性等内容,并详细阐述了文件系统如何在磁盘上实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

文件呢是进程创建的信息逻辑单元. 一个磁盘上有成千甚至几百万的文件, 每一个文件之间相互独立, 唯一不同的是文件时是对磁盘的建模. 进程可以读取一个已经存在的文件, 并且也可以在需要的时候创建文件. 存储在文件中的信息必须是永久的, 不能因为进程的创建而终止或者受到影响. 在操作系统中处理文件的部分叫做文件系统.

文件命名

文件是一种抽象机制, 它提供了在磁盘上保存信息而且方便以后读取的方法.
文件的命名规则在不同的系统中各不相同. 在进程创建文件的时候, 进程会给文件进行命名, 当进程终止时, 该文件依然存在, 其他进程仍然可以访问它.

文件结构

文件的结构可分为字节序列, 记录序列以及数结构.

文件类型

字符类型, 块特殊文件, 目录文件, 字符文件, 链接文件等等.

文件的访问

顺序文件访问, 随机文件访问

文件属性

文件的大小, 文件创建时间, 文件修改时间, 创建者, 拥有者等都属于文件属性, 也叫做元数据

文件操作
#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 结点, 是一个数据结构数组, 它说明了文件的方方面面, 下来是根目录, 以及其他文件目录
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值