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
ext4도 2015년 9월부터 지원하는 것으로 보이는 XFS와 유사하지만 분명히 호환되지 않는 인터페이스입니다.
결론: 두 인터페이스 모두 파일에 액세스하려면 파일을 열어야 하므로 제대로 설계되지 않았습니다. 관리자는 어떤 사용자가 인터페이스에서 플래그를 백업하고 복원 star
할 수 있는지 와 같은 중요한 사용자에게 알리지 않기 때문에 인터페이스에 신경 쓰지 않는 것 같습니다 .FS_IOC_GETFLAGS