繁体   English   中英

如何在多个操作系统下获取c中的文件修改时间?

[英]How to get file modification time in c under multiple OS?

我正在尝试用c编写一个便携式函数来比较2个文件的最后修改时间。 文件很小并且一个接一个地写入,因此我需要比1秒(毫秒)更精细的粒度。
似乎有太多的时间/日期功能......

你应该看看stat()函数。 它可以在* nixwindows上使用

它们都会返回一个包含字段名称st_msize的结构。 它们是我听过的最好的功能,以便从操作系统获取此类信息。

由于您需要可移植性,请注意处理Windows上可用的各种不同类型。 在* NIX上,它是一个经典的time_t结构。 如果包含特定呼叫,则可以获得纳秒秒数:根据手册页,它在POSIX.1-2008中定义。

您还可以看看如何处理64/32位time_t

C标准没有任何功能,但Posix规范确实如此。 2008版甚至提供亚秒级时间戳。 #define _POSIX_C_SOURCE 200809L

以下代码应该让您了解如何使用它。

#define _POSIX_C_SOURCE 200809L
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>

#include <stdio.h> // for printf
#include <stdlib.h> // for EXIT_FAILURE

int main(int argc, char **argv)
{
    for (int i = 1; i < argc; ++i) {
        struct stat st = {0};
        int ret = lstat(argv[i], &st);
        if (ret == -1) {
            perror("lstat");
            return EXIT_FAILURE;
        }

        printf("%s: mtime sec=%lld nsec=%lld\n", argv[i],
               (long long) st.st_mtim.tv_sec, 
               (long long) st.st_mtim.tv_nsec);
    }

    return 0;
}

对于POSIX UNIX, stat()是可移植的,并提供struct stat st_mtime ,这是epoch秒内的修改时间。 Windows stat返回窗口时间值,并且具有创建时间而不是st_ctime 对于非POSIX UNIX实现,Windows和其他操作系统,没有文件修改时间的可移植概念。 因此,根据您对便携式设备的想法,这整个概念可能或我不适合您。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM