首页 > 代码库 > [文件系统]文件系统学习笔记(十)---杂项
[文件系统]文件系统学习笔记(十)---杂项
1,在一个系统上,比如smartphone平台,有很多分区,比如/data和/system分区都是ext4文件系统,但是系统中还是只有一个file_system_type的成员,不过每个分区对应的ext4文件系统对应不同的super_block,fs_supers就是将这些相同文件系统不同的super block链接起来形成双向循环链表,fs_supers是链表头,链表元素由super_block结构体的s_instance成员表示。系统中所有的super_block由super_block结构体的s_list链接成双向循环链表,表头是super_blocks变量表示。
2,伪文件系统是不能装载的文件系统,因而不能从用户空间直接以文件或者目录的方式看到。系统中所有的伪文件系统可以从/proc/filesystem中获取
3,dumpe2fs命令 dumpe2fs
4,内存中文件系统第一个block是super block,每个group都有一个super block,后面的superblock是第一个super block的备份,group是有很多block组成的,比如32768
5,inode的大小是由各个文件系统本身决定,比如256B等等
6,查看磁盘和目录容量的命令分别是df,du.
7,一个文件至少占用一个block,若文件太大则占用多个block.
8,当我们删除文件的时候,只是把Inode标记为可用,文件在block中的内容是没有被清除的,只有在有新的文件需要占用block的时候,才会被覆盖,这也是我们删除文件还可以恢复的原因。
9, stat命令查看文件的时候里面每个成员的含义?
答:stat命令的使用如以下截图所示,每个成员的含义如下:
File:表示文件名。
Blocks:表示该文件占用的块数,通常linux一个块大小为512Byte,而文件系统块的大小为4096,4096/512=8,如下截图表示f1文件占用8个块.也就是一个文件最少占用8 block。
Device:表示的是存放文件的设备。
Inode:表示的是该文件对应的inode的号。
Size:表示的是文件的大小。
Links:表示的是硬链接的个数。
IO Block:系统格式化block的大小,文件系统块的大小。
Accesss:表示的是最后一次访问文件时间,读一次该文件,该时间就会改变。
Modify:表示的是最后一次修改文件的时间,对文件修改一次该时间就会更新,比如用VI命令后保存文件。
Change:表示的是最后一次修改文件熟悉信息(inode节点)的时间,比如使用chmod命令更新该文件的权限。
10,每个进程最多打开32个文件,如果一个进程同时打开32个文件的话是否可以扩展?
答:在linux内核里分配文件描述符的时候,系统默认每个进程同时打开的文件个数是32,如果超过的话会在alps/kernel/fs/File.c文件里的alloc_fd()函数里的expand_files()函数里进行扩展。但是最大扩展个数的限制是1024,也就是即使扩展,一个进程同时打开文件个数为1024.不过这个1024用户还是可以通过命令去修改。
11,linux编程如何查看文件系统相关信息statfs函数。
查看文件系统相关信息
- #include <sys/vfs.h>
- int statfs(const char *path, struct statfs *buf);
- int fstatfs(int fd, struct statfs *buf);
参数:
path: 位于需要查询信息的文件系统的文件路径名。
fd: 位于需要查询信息的文件系统的文件描述词。
buf:以下结构体的指针变量,用于储存文件系统相关的信息
- struct statfs {
- long f_type; /* 文件系统类型 */
- long f_bsize; /* 经过优化的传输块大小 */
- long f_blocks; /* 文件系统数据块总数 */
- long f_bfree; /* 可用块数 */
- long f_bavail; /* 非超级用户可获取的块数 */
- long f_files; /* 文件结点总数 */
- long f_ffree; /* 可用文件结点数 */
- fsid_t f_fsid; /* 文件系统标识 */
- long f_namelen; /* 文件名的最大长度 */
- };
[文件系统]文件系统学习笔记(十)---杂项