Linux支持多种文件系统(例如:ext3、NTFS、FAT32等)。
下图显示了 Linux 如何允许进程访问文件:
所以假设一个进程调用read()
系统调用来读取一个文件,会发生的情况是会访问VFS层,VFS层会根据文件所在分区的文件系统来决定访问哪个文件系统驱动被阅读驻留在。
Linux 提供了许多系统调用来访问文件(例如:read()
、write()
、rename()
等)。
现在read()
可以在 Linux 支持的所有文件系统上工作write()
。rename()
但有些特定功能仅存在于某些文件系统上,而在其他文件系统上则不存在。例如:在 NTFS 文件系统上,您可以设置档案文件的位,而这不能在 ext3 文件系统上完成。
现在我的问题是,Linux 是否有系统调用来访问它支持的文件系统的所有功能?例如:Linux 是否有系统调用来设置档案NTFS 文件系统上的文件的位?
答案1
Linux 是否有系统调用来设置 NTFS 文件系统上文件的存档位?
对于这种特殊情况,ntfs-3g
驱动程序通过导出文件属性扩展属性, 看我可以在 Linux 上的 NTFS 上设置文件的“存档”位吗?
(V)FAT 文件系统具有类似的文件属性,但它使用函数ioctl()
来访问它们,请参见ioctl_fat(2)
。 (ioctl()
是一种多用途系统调用,用于各种不保证真正系统调用的设备特定内容。)
现在我的问题是,Linux 是否有系统调用来访问它支持的文件系统的所有功能?
很难回答一定,但至少有一个相反的例子。 ext4 内部支持文件的“出生时间”时间戳(例如,真实的创建时间,与ctime
inode 修改时的更改不同)。但尽管 ext4 是“标准”文件系统,但很长一段时间以来,都没有系统调用来访问诞生时间。
现在应该支持它,statx()
系统调用添加到Linux 4.11,2017 年 4 月。
有关的:
- ext4上的出生是空的
- lwn.net 上有很多关于 statx 的文章,包括例如statx() v3