Linux是否有系统调用来访问其支持的文件系统的所有功能?


12

Linux支持许多文件系统(例如:ext3,NTFS,FAT32等)。

下图显示了Linux如何允许进程访问文件:

在此处输入图片说明

因此,假设有一个称为read()系统调用的过程来读取文件,将发生的事情是将访问VFS层,并且VFS层将根据文件所要分区的文件系统来决定访问哪个文件系统驱动程序。被读取驻留。

Linux提供了许多系统调用来访问文件(例如:read()write()rename()等)。

现在,read()write()rename()所有的文件系统Linux支持工作。

但是有些特定功能仅在某些文件系统上存在,而在其他文件系统上不存在。例如:在NTFS文件系统上,您可以将文件的“ 存档”位置1,而在ext3文件系统上则不能。

现在我的问题是,Linux是否有系统调用来访问其支持的文件系统的所有功能?例如:Linux是否有系统调用来为NTFS文件系统上的文件设置存档位?

Answers:


10

Linux是否有系统调用来为NTFS文件系统上的文件设置存档位?

对于这种特殊情况,ntfs-3g驱动程序通过扩展属性导出文件属性,请参阅在Linux上的NTFS上可以在文件上设置“ Archive”位吗?

(V)FAT文件系统具有相似的文件属性,但是它使用ioctl()函数来访问它们,请参见ioctl_fat(2)。(ioctl()是一种多用途系统调用,用于各种不保证实际系统调用的特定于设备的东西。)

现在我的问题是,Linux是否有系统调用来访问其支持的文件系统的所有功能?

很难肯定地回答,但是至少有一个相反的例子。ext4内部支持文件的“出生时间”时间戳(例如,实际的创建时间,与ctimeinode修改中的更改不同)。但是,即使ext4是“标准”文件系统,很长一段时间以来,也没有系统调用来访问出生时间。

它现在应该受到支持,并且在2017年4月在Linux 4.11中添加了statx()系统调用

有关:


3
ntfs!=胖。至少ntfs的内核版本没有任何设置或获取存档标志的方法,尽管其标头对此进行了定义。似乎只有基于保险丝的ntfs-3g支持它(通过扩展属性,而不是特殊的ioctl)。
比利叔叔

这与问题没有直接关系,但是作为对您的提及的补充statx,现在C语言库和几天前发布的最新版本的coreutils都支持它。
Stephen Kitt

@ UncleBilly,d'oh,显然我看不懂,但只是自动想到(v)fat。感谢您注意到这一点,我将看看是否可以找到更合适的参考。
ilkkachu
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.