一.什么是文件系统
对一般用户而言,不知道如何驱动一个磁盘,以及计算数据在磁盘上的存放位置,此时就要用到抽象的概念
进程的抽象是CPU,虚拟内存的抽象是内存,对磁盘而言,操作系统为使用户使用方便,将磁盘抽象为文件系统
二.文件系统的基本概念
文件系统可以理解为操作系统为用户提供的操作磁盘的接口
简单来说,文件系统将其接触的磁盘物理特性转换为用户能看到的路径名和文件名,用户对磁盘进行访问只需要给出文件名和路径名即可,而无需知道磁柱,磁道,扇面,数据块等信息
文件命名:操作系统将文件名翻译为其数据块在磁盘上存放的地址,由于磁盘的寻址单位是扇面,所以磁盘地址实际上就是一个个的扇面号
扩展名:表明文件类型
内容寻址:除了给出文件名外,还可以给出文件的内容,供操作系统查找使用
文件访问:a.顺序访问:从开头开始访问,按照先来后到的顺序读取数据
b.随机访问:可以按照任意顺序读取数据记录
文件属性:
文件操作:可以对文件进行操作,创建,删除,打开,关闭,读写添加,等等
三.文件夹
操作系统需要一个数据结构来记录每个文件在磁盘上的地址,这个数据结构就是文件夹
文件夹中存放的是从文件到文件所在磁盘的地址的映射
根目录:文件夹里可以有子文件夹,因此就形成了一个层次结构,这个层次结构的顶端就是根文件夹(也称根目录)
根目录是一个文件系统的总起点,它在操作系统启动的时候加载到内存
四.文件拷贝
文件拷贝程序实现:打开源文件,创建目标文件,然后循环往复地将源文件内容读取到一个缓冲区,然后将缓冲区的内容写到目标文件里,拷贝结束后,关闭源文件和目标文件
#include<sys/types.h>
#include<fcntl.h>
#include<stdlib.h>
#include<unistd.h>
Int main(intargc,char*argv[]);
#define BUF_SIZE4096 定义缓冲区为4096字节
#define OUTPUT_MODE0700 输出文件的保护码
Int main(intargc,char*argv[]){
Int int_fd,out_fd,rd_count,wt_count;
Char buffer[BUF_SIZE]
…..
In_fd=open(argv[1],O_RDONLY) 打开源文件
If(in_fd<0)exit(2)如果不能打开源文件,退出程序
Out_fd=create(argv[2],OUTPUT_MODE)创建目标文件
If (out_fd<0)exit(3)如果不能创建,退出程序
While(true){ 循环往复
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) exit(4)如果写数据错误,退出程序
}
Close(in_fd);close(out_fd);关闭文件句柄
If(rd_count==0)exit(0);正常退出程序
Else exit(5)出错退出
}