【问题标题】:force a created file or folder to have a specific stat struct强制创建的文件或文件夹具有特定的统计结构
【发布时间】:2014-01-16 15:56:14
【问题描述】:

我有一个 stat 结构,我想创建一个文件夹或文件,并希望强制它具有与 stat 结构中相同的信息。 例如:

create file: test.txt
The file's last modification date is today 16.01.2014
change file's stat so that it shows:
last modified on 01.01.2050

我该怎么做?

【问题讨论】:

    标签: c stat


    【解决方案1】:

    如果要设置mtime/atime 字段,可以使用utime() 函数。创建文件/目录后使用。

    mode 字段设置为 chmod()

    uid/gid,如果您是 root,则设置为 chown()

    sizenlinks 字段如果您设置它们所引用的信息(文件的数据和包含该文件的目录结构)将具有正确的值。

    但是inodevctime字段是系统内部设置的,不能更改。无论如何,你没有理由想要设置它们。

    【讨论】:

    • 我实际上想创建一个具有特定统计结构的文件!具体来说,我正在恢复我之前备份的文件。统计信息也必须相应设置。
    • 另外,我刚刚检查了 tar。 Tar 保留文件的 ino 和 dev。所以应该可以吧!
    • @hhachem:你有这方面的参考/实验吗?我很难相信...如果您将同一个 tar 文件解压缩两次怎么办? dev/ino 对必须是唯一的!
    • 我相信你是对的。我只是将 .tar 文件移到其他地方,将其提取出来,它给了我一个不同的 inode 编号。但是当我将它提取到与原始目录相同的目录中时,它正在替换原始并返回相同的 inode 号。
    • @hhachem:嗯,当一个文件被删除时,它的 inode 被标记为空闲,以后可能会被重用。因此,如果您在删除后立即恢复,则很可能会获得相同的 inode 编号(dev 是设备(卷)标识符,因此这是不可能的)。
    【解决方案2】:

    我不认为你可以,但没关系。

    struct stat 中的大部分信息是文件系统的实现细节;文件“是相同的”,即使(例如)它有不同的 inode。

    您需要查看各个文件相关的库调用,以使所有实际相关的字段匹配,但是:

    • st_mode可以通过chmod()设置
    • st_uidst_gid可以通过chown()设置
    • st_atimest_mtime可以通过utime()设置

    没有单一的“设置所有stat 字段”函数,因为那没有意义。

    【讨论】:

    • 有趣。我想这应该对我有进一步的帮助。谢谢你。我将不得不接受罗德里戈的回答,因为他回答得更快。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-20
    • 2020-05-14
    • 1970-01-01
    • 2013-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多