【问题标题】:How to set immutable file attribute如何设置不可变文件属性
【发布时间】:2019-08-20 14:56:34
【问题描述】:

如何使用 Go 为文件设置不可变属性?

我需要一个在文件上设置/取消设置此属性的函数,类似于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找到了一段代码。

【问题讨论】:

    标签: linux go ioctl


    【解决方案1】:

    我不确定你在这里使用了正确的 ioctl... 至少 chattr 和 Setting Immutable Flag using ioctl() in C 的解决方案使用 FS_IOC_SETFLAGS(你可以看到 chattr 使用 strace 做了什么)。您可以查看/usr/include/linux/fs.h,尤其是关于“Inode flags”的大评论,了解更多信息。

    【讨论】:

    • 在搜索FS_IOC_SETFLAGS 时,找到了解决方案,见上文。感谢您的想法:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-19
    • 1970-01-01
    • 2017-05-07
    • 1970-01-01
    • 2011-08-12
    • 1970-01-01
    相关资源
    最近更新 更多