【问题标题】:How to read vfat attributes of files in Linux using C如何使用 C 在 Linux 中读取文件的 vfat 属性
【发布时间】:2009-10-30 00:20:56
【问题描述】:

我有一个使用 vfat 驱动程序安装在 Linux 中的 FAT 文件系统。 我想知道如何读取文件的 vfat 属性,例如“隐藏”和“只读”。

根据我目前所读到的内容,如果我对文件使用 stat() glibc 命令,我只会获得此处列出的文件属性: http://www.gnu.org/s/libc/manual/html_node/Attribute-Meanings.html#Attribute-Meanings

但是,这些不包含任何 vfat 属性。有人可以帮忙吗?

谢谢,

鲣鱼

【问题讨论】:

    标签: c linux


    【解决方案1】:

    FAT 的 DOS 属性不能很好地映射到 UNIX 文件系统模型,因此 Linux 的 vfat 驱动程序没有反映它们。

    使用mtools从用户空间读取文件系统,而不是挂载文件系统。


    编辑我撒谎了。显然,vfat 驱动程序能够处理这些 DOS 属性,至少从 2.4.29 开始(我认为;我的历史日志不会追溯到那么远)。

    #include <inttypes.h>
    #include <sys/ioctl.h>
    #include <linux/msdos_fs.h>
    
    int fd = open("/mnt/fat/...", ...);
    __u32 attrs;
    ioctl(fd, FAT_IOCTL_GET_ATTRIBUTES, &attrs);
    attrs = ATTR_NONE;  /* ATTR_{RO,HIDDEN,SYS,VOLUME,DIR,ARCH} */
    ioctl(fd, FAT_IOCTL_SET_ATTRIBUTES, &attrs);
    

    【讨论】:

    • 谢谢,我一定会尝试 mtools。除了 mtools,还有其他已知的方法(或 hack)能够检索 FAT 属性吗?
    • 这样更好,我明天在我的机器上试试。 FAT_IOCTL_GET_ATTRIBUTES(以及可能对我有用的其他选项)记录在哪里?谢谢。
    • 我在挖掘 /usr/src/linux/fs/fat/file.c 时发现了它们——我以前从未见过任何关于这些 ioctl 的文档。
    • 我在这里发布了一个后续问题:stackoverflow.com/questions/1648117/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-02
    • 2011-04-27
    • 1970-01-01
    • 1970-01-01
    • 2018-12-18
    • 1970-01-01
    相关资源
    最近更新 更多