Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何在linux上显示文件上次修改时间_C_Linux_File_Time - Fatal编程技术网

C 如何在linux上显示文件上次修改时间

C 如何在linux上显示文件上次修改时间,c,linux,file,time,C,Linux,File,Time,我想写一个C程序来显示文件上次修改的时间,以微秒或毫秒为单位。我怎么办?你能帮我一个忙吗 非常感谢。您可以使用stat()函数,它将返回struct stat,其中包含上次修改文件的时间。这是手册页。至于精度,这取决于您的文件系统是否支持亚秒时间戳。要完成Andrew和ZelluX的回答,请参见 限制在文件系统中。Linux是常用的,您可以在维基百科中看到: Date resolution 1s 使用stat()函数。在glibc的最新版本中,st_mtim(注意:无尾随e)是一个类型为s

我想写一个C程序来显示文件上次修改的时间,以微秒或毫秒为单位。我怎么办?你能帮我一个忙吗


非常感谢。

您可以使用stat()函数,它将返回struct stat,其中包含上次修改文件的时间。这是手册页。至于精度,这取决于您的文件系统是否支持亚秒时间戳。

要完成Andrew和ZelluX的回答,请参见 限制在文件系统中。Linux是常用的,您可以在维基百科中看到:

Date resolution   1s
使用
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秒),如果它不存在。


Michael Kerrisk的《Linux编程接口》一书中有一个关于文件属性的好章节

有一个stat命令,您可以直接使用它


是否可以使用stat获取毫秒或微秒范围内的时间。。。恐怕不行@Alphaneo:我看了那个网页,上面说
stat
以纳秒精度返回时间。是的,Linux上的stat()有额外的字段来添加纳秒分辨率,因为内核2.5.48。然而,正如@ZelluX所指出的,准确度!=精度——这取决于文件系统支持什么。@佩恩:我也使用stat()函数,但它似乎只显示一个文件。我想显示某个目录中所有文件的上次修改时间。怎么做?@JavaMobile您可以使用getdents()或readdir()获取某个目录中的所有文件。只是出于好奇,您为什么需要这个?@Alphaneo:事实上,我想显示某个目录中所有文件的“上次修改时间”。根据这个,我可以对我的文件进行排序。谢谢你。太棒了。但是输出是无序的,可以根据文件名对它们进行排序吗?@JavaMobile:Sure-将指向文件名的指针放入数组并对它们进行排序,然后运行该数组并调用
stat()
。这个答案是针对shell的,但OP要求使用C程序。然而,我在寻找shell命令时发现了这个问题,stat(1)正是我所需要的