如何设置不可变文件属性
How to set immutable file attribute
如何使用 Go 设置文件的不可变属性?
我需要一个set/unset这个文件属性的函数,类似于chattr +i file
我发现了这个:IoctlSetInt
如何使用?
file, err := os.Open("file")
if err != nil {
fmt.Printf("%s\n", err)
return
}
err = unix.IoctlSetInt(int(file.Fd()), unix.PERF_EVENT_IOC_MODIFY_ATTRIBUTES, unix.STATX_ATTR_IMMUTABLE)
if err != nil {
fmt.Printf("%s\n", err)
}
错误:inappropriate ioctl for device
解决方案
我在 snapd's repo 中找到了一段代码。
我不确定你在这里使用了正确的 ioctl...至少 chattr 和 的解决方案使用 FS_IOC_SETFLAGS
(你可以看到 chattr 使用 strace
).您可以查看 /usr/include/linux/fs.h
,特别是有关 "Inode flags" 的大评论,以获取更多信息。
如何使用 Go 设置文件的不可变属性?
我需要一个set/unset这个文件属性的函数,类似于chattr +i file
我发现了这个:IoctlSetInt
如何使用?
file, err := os.Open("file")
if err != nil {
fmt.Printf("%s\n", err)
return
}
err = unix.IoctlSetInt(int(file.Fd()), unix.PERF_EVENT_IOC_MODIFY_ATTRIBUTES, unix.STATX_ATTR_IMMUTABLE)
if err != nil {
fmt.Printf("%s\n", err)
}
错误:inappropriate ioctl for device
解决方案
我在 snapd's repo 中找到了一段代码。
我不确定你在这里使用了正确的 ioctl...至少 chattr 和 FS_IOC_SETFLAGS
(你可以看到 chattr 使用 strace
).您可以查看 /usr/include/linux/fs.h
,特别是有关 "Inode flags" 的大评论,以获取更多信息。