【问题标题】:How to display file last modification time on linux如何在linux上显示文件的最后修改时间
【发布时间】:2011-07-02 11:16:50
【问题描述】:

我想编写一个 C 程序以微秒或毫秒为单位显示文件的最后修改时间。我该怎么办?你能帮我吗?

非常感谢。

【问题讨论】:

  • 只是出于好奇,你为什么需要这个?
  • @Alphaneo:实际上,我想在某个目录中显示所有文件的最后修改时间。据此,我可以对我的文件进行排序。谢谢

标签: c linux file time


【解决方案1】:

【讨论】:

  • 这个答案是针对外壳的,但 OP 要求提供 C 程序。尽管如此,我在寻找 shell 命令时发现了这个问题,而 stat(1) 正是我所需要的! :)
【解决方案2】:

JFS、XFS、ext4 和 Btrfs 支持纳秒时间戳。

Michael Kerrisk 所著的“The Linux Programming Interface”一书对文件属性有一个很好的部分

【讨论】:

    【解决方案3】:

    使用了stat() 函数。在足够新的 glibc 版本中,st_mtim(注意:没有尾随 e)是一个类型为 struct timespec 的字段,用于保存文件修改时间:

    struct stat st;
    
    if (stat(filename, &st)) {
        perror(filename);
    } else {
        printf("%s: mtime = %lld.%.9ld\n", filename, (long long)st.st_mtim.tv_sec, st.st_mtim.tv_nsec);
    }
    

    您应该在构建系统中检查struct stat 中是否存在st_mtim,如果不存在则准备回退到st_mtime(类型为time_t,分辨率仅为1 秒)现在。

    【讨论】:

    • 非常感谢。这真是棒极了。但是输出是乱序的,能不能按照文件名排序?
    • @JavaMobile:当然——将指向文件名的指针放入一个数组并对其进行排序,然后遍历该数组并调用stat()
    【解决方案4】:

    您可以使用 stat() 函数,它会返回包含文件最后修改时间的 struct stat。这是手册页http://linux.die.net/man/2/stat。至于精度,这取决于你的文件系统是否支持亚秒级时间戳。

    【讨论】:

    • 是否有可能使用 stat 获得 Milli 或 Microsecond 范围内的时间...恐怕不能;)
    • @Alphaneo:我查看了那个网页,上面说stat 以纳秒精度返回时间。
    • 是的,从内核 2.5.48 开始,Linux 上的 stat() 有额外的字段来添加纳秒分辨率。但是,正如@ZelluX 指出的那样,准确度!= 精确度——这实际上取决于文件系统支持的内容。
    • @payne:我也使用 stat() 函数,但它似乎只显示一个文件。我想显示某个目录中所有文件的最后修改时间。怎么办?
    • @JavaMobile 您可以使用 getdents() 或 readdir() 来获取某个目录中的所有文件。
    【解决方案5】:

    完成 AndrewZelluX 的回答。
    限制在文件系统中。对于Linux来说ext3是常用的,可以在维基百科中看到:

    Date resolution   1s
    

    【讨论】:

      猜你喜欢
      • 2012-05-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-26
      • 2017-03-23
      • 1970-01-01
      • 2010-10-05
      • 1970-01-01
      相关资源
      最近更新 更多