FS_IOC_GETFLAGS
和FS_IOC_FSGETXATTR
ioctl
命令有什么区别?两者都返回什么标志?
答案1
在 Linux 环境中,FS_IOC_GETFLAGS
两者FS_IOC_FSGETXATTR
都检索 inode 标志。
GETFLAGS
是较旧的ioctl
,并且最初来自ext2
(同样,在 Linux 中);它操作的是 32 位值,因此扩展能力有限——没有太多未使用的位可用。
FSGETXATTR
来自 XFS,最近(2016 年)从 XFS 转移到共享 VFS 层。它使用一种数据结构struct fsxattr
,允许更多的值和更多的扩展。
这两者以及它们返回的数据的含义都定义在linux/fs.h
。这些GETFLAGS
标志还记录在ioctl_iflags(2)
。两者之间的共同值主要对应GETFLAGS
于历史上支持的标志XFS:“仅追加”、“无 atime 更新”、“无转储”、“不可变”和“同步更新”。
请注意,在这两种情况下,不同文件系统的支持有所不同,并且某些标志实际上根本不受支持。
答案2
FS_IOC_GETFLAGS
是访问 BSD 样式文件标志的接口。它只是使用比 *BSD 更糟糕的界面,因为您需要打开文件才能访问。 *BSD 在 中包含这些信息struct stat
,因此如果您想在 Linux 上的 /dev/ 条目中获取相关信息,您可能会导致磁带驱动器倒带其介质。
FS_IOC_FSGETXATTR
是来自 XFS 的一个类似但显然不兼容的接口,自 2015 年 9 月以来,ext4 似乎也支持该接口。
结论:这两个界面都设计得很糟糕,因为它们需要打开文件才能访问。维护人员似乎并不关心他们的界面,因为他们没有通知重要用户,例如star
哪些用户能够从FS_IOC_GETFLAGS
界面备份和恢复标志。