我正在尝试用c编写一个便携式函数来比较2个文件的最后修改时间。文件很小,一个接一个地写,所以我需要比1秒(毫秒)更精细的粒度 似乎有太多的时间/日期函数......
答案 0 :(得分:3)
您应该查看stat()
函数。它位于*nix和windows上。
他们都会返回一个包含字段名称st_msize的结构。它们是我听过的最好的功能,以便从操作系统获取此类信息。
由于您需要可移植性,请注意处理Windows上可用的各种不同类型。在* NIX上,它是一个经典的time_t结构。如果您包含特定呼叫,则可以获得纳秒秒数:根据手册页,它在POSIX.1-2008中定义。
答案 1 :(得分:3)
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;
}
答案 2 :(得分:1)
对于POSIX UNIX,stat()
是可移植的,并提供struct stat st_mtime
,这是在纪元秒中的修改时间。 Windows stat返回窗口时间值,并且具有创建时间而不是st_ctime
。
对于非POSIX UNIX实现,Windows和其他操作系统,没有文件修改时间的可移植概念。因此,根据您对便携式设备的想法,这整个概念可能或不适合您。