如何在多操作系统下获得c语言中的文件修改时间?
我正在尝试用c编写一个可移植函数,比较两个文件的最后修改时间。文件很小,一个接一个地写入,因此我需要比1秒(毫秒)更精细的粒度。如何在多操作系统下获得c语言中的文件修改时间?,c,file,datetime,portability,C,File,Datetime,Portability,我正在尝试用c编写一个可移植函数,比较两个文件的最后修改时间。文件很小,一个接一个地写入,因此我需要比1秒(毫秒)更精细的粒度。 似乎有太多的时间/日期函数…您应该查看stat()函数。它可以随时使用 它们都将返回一个包含字段名stmsize的结构。为了从操作系统中获取此类信息,它们是我听说过的最好的函数 由于您需要可移植性,请注意Windows上提供的各种不同类型。在*尼克斯,这是一个经典的时间结构。如果您包括特定的调用,您可以获得纳秒mtime:根据手册页,它是在POSIX.1-2008中定
似乎有太多的时间/日期函数…您应该查看
stat()
函数。它可以随时使用
它们都将返回一个包含字段名stmsize的结构。为了从操作系统中获取此类信息,它们是我听说过的最好的函数
由于您需要可移植性,请注意Windows上提供的各种不同类型。在*尼克斯,这是一个经典的时间结构。如果您包括特定的调用,您可以获得纳秒mtime:根据手册页,它是在POSIX.1-2008中定义的
您还可以查看对于POSIX UNIX,stat()
是可移植的,并提供了struct stat st_mtime
,它是以秒为单位的修改时间。Windows stat返回Windows时间值,并具有创建时间,而不是st\u ctime
。
对于非POSIX UNIX实现、Windows和其他操作系统,没有可移植的文件修改时间概念。因此,取决于您对便携性的想法,整个概念可能适用于您,也可能不适用于您。C标准没有任何用于此的功能,但Posix规范有。2008版甚至提供了亚秒级的时间戳#定义_POSIX_C_源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_C_SOURCE200809L
#包括
#包括
#包括
#包括//用于printf
#包括//用于退出故障
int main(int argc,字符**argv)
{
对于(int i=1;i
修改时间不是可移植的C概念。