[英]How to get file modification time in c under multiple OS?
我正在尝试用c编写一个便携式函数来比较2个文件的最后修改时间。 文件很小并且一个接一个地写入,因此我需要比1秒(毫秒)更精细的粒度。
似乎有太多的时间/日期功能......
你应该看看stat()
函数。 它可以在* nix和windows上使用 。
它们都会返回一个包含字段名称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.