文件系统

Mere data makes a man. A and C and T and G. The alphabet of you. All from four symbols. I am only two: 1 and 0.

We have no difference

文件系统是系统对文件的存放排列方式,不同的文件系统关系到数据如何在磁盘进行存储,本文将针对文件系统相关内容进行总结。

文件描述符1

概念

对于一个内核,一个打开的文件对应一个文件描述符(非负整数),我们通过这个文件描述符对文件进行读写访问操作。每个Linux系统都有三个标准的POSIX文件描述符:

POSIX Constants Name File Descriptors Description
STDIN_FILENO 0 Standard input
STDOUT_FILENO 1 Standard output
STDERR_FILENO 2 Standard error

有三个系统文件表,分别是文件描述符表、文件表和节点表。一个文件描述符映射至一个打开的文件表,这个文件表包含了文件相关的信息,包括读写性偏移量等,然后这个表又指向实际的文件节点表。在上面这张图中,文件描述符0和2实际指向的是同一个文件,且都为只读;而1和4以不同的读写权限指向同一个文件。3是一个已经被关闭的描述符,不指向任何文件。

图片名称

多进程下的文件描述符

当使用fork创建多进程时,子进程会复制父进程的文件描述符,创建自己的文件描述符表,但是指向相同的文件,所以父子进程的fd表是相互独立的。

重定向

文件描述符可以被重定向(复制),

系统调用

与重定向相关的系统调用为dupdup2

dup

dup的函数原型如下:

1
2
#include <unistd.h>
int dup(int oldfd);

其功能为分配一个文件描述符,指向oldfd所指向的文件,新描述符是调用进程文件描述表中最小可用的文件描述符。例如有下面一段代码:

1
2
3
4
5
6
7
8
int fd,fd1;
fd = open("test.txt",O_CREAT|O_WRONLY,0666);
if(fd < 0)
{
...
}
close(1);
fd1 = dup(fd);

其实际意义如下:

图片名称

这两个文件描述符互不影响。

不同文件系统

Windows支持的文件系统

win支持三种文件系统,分别是NTFS、FAT32以及exFAT,下面将对其进行一些总结

NTFS

特性
  • 使用最广泛
  • 具有日志功能
  • 无文件大小限制
  • 兼容性较差

FAT32

特性
  • 比较老,但是兼容性比较好
  • 只支持最大单文件大小容量4GB

文件系统比较

Linux支持的文件系统

linux的文件系统一般为ext2、ext3以及最新的ext4

ext3

特性
  • 允许日志

双系统相互访问

如果电脑上安装了双系统,那么意味着磁盘将会以不同的文件系统进行划分,有时我们会有跨系统访问硬盘的需求,本节将解决双系统相互访问不同文件系统的硬盘的问题。

Windows下访问EXT2/3/4

下载Linux Reader,直接即可访问linux的硬盘

参考文献

0%