C 如何以纳秒精度检索文件时间?

C 如何以纳秒精度检索文件时间?,c,posix,stat,timespec,C,Posix,Stat,Timespec,我刚刚发现stat()调用和相应的struct stat,不包含精度大于1秒的文件时间字段。对于设置这些时间,有多种{f,l}utime{n,}s()函数,但不用于获取 那么,如何以纳秒的精度获得这些时间,最好是使用POSIXAPI?大多数文件系统都没有如此精确的时间戳。发件人: 大多数文件系统,包括ext3, 包括以下时间戳数据: 精确到一秒钟。Ext4扩展了 该数据的准确度为纳秒。 一些消息来源还表明 ext4时间戳支持日期到 2514年4月25日与1月18日, 2038年,对于ext3 大

我刚刚发现
stat()
调用和相应的
struct stat
,不包含精度大于1秒的文件时间字段。对于设置这些时间,有多种
{f,l}utime{n,}s()
函数,但不用于获取


那么,如何以纳秒的精度获得这些时间,最好是使用POSIXAPI?

大多数文件系统都没有如此精确的时间戳。发件人:

大多数文件系统,包括ext3, 包括以下时间戳数据: 精确到一秒钟。Ext4扩展了 该数据的准确度为纳秒。 一些消息来源还表明 ext4时间戳支持日期到 2514年4月25日与1月18日, 2038年,对于ext3


大多数文件系统都没有这样精确的时间戳。发件人:

大多数文件系统,包括ext3, 包括以下时间戳数据: 精确到一秒钟。Ext4扩展了 该数据的准确度为纳秒。 一些消息来源还表明 ext4时间戳支持日期到 2514年4月25日与1月18日, 2038年,对于ext3


stat()
本身返回的
stat
结构已针对POSIX.1-2008进行了升级

struct stat
结构包含三次修改,如下所示:

struct timespec st_atim - Last data access timestamp. 
struct timespec st_mtim - Last data modification timestamp. 
struct timespec st_ctim - Last file status change timestamp.
(在
标题下,
)和
struct timespec
中定义为至少包含:

time_t  tv_sec          - Seconds. 
long    tv_nsec         - Nanoseconds. 

以前,这三次都是具有1秒分辨率的
time\t
值。

stat()
本身返回的
stat
结构已针对POSIX.1-2008进行了升级

struct stat
结构包含三次修改,如下所示:

struct timespec st_atim - Last data access timestamp. 
struct timespec st_mtim - Last data modification timestamp. 
struct timespec st_ctim - Last file status change timestamp.
(在
标题下,
)和
struct timespec
中定义为至少包含:

time_t  tv_sec          - Seconds. 
long    tv_nsec         - Nanoseconds. 

以前,这三个时间都是1秒分辨率的时间值。

纳秒文件时间戳的值是多少?磁盘是相对较慢的设备;将文件写入磁盘所需的时间比纳秒长得多。假设一次寻道和一次扇区写入,写入文件的时间以几十毫秒为单位,由于实际物理磁盘旋转速度的微小变化、操作系统的干扰等原因,会产生相当大的错误。。。我能分辨出文件的时间戳,这样你就能分辨出一个文件是在另一个文件之前写的;这就是你需要的吗?我知道我在追求什么。这一纪律有多软弱?我不能抱着电脑做我想做的事。纳秒文件时间戳的价值是多少?磁盘是相对较慢的设备;将文件写入磁盘所需的时间比纳秒长得多。假设一次寻道和一次扇区写入,写入文件的时间以几十毫秒为单位,由于实际物理磁盘旋转速度的微小变化、操作系统的干扰等原因,会产生相当大的错误。。。我能分辨出文件的时间戳,这样你就能分辨出一个文件是在另一个文件之前写的;这就是你需要的吗?我知道我在追求什么。这一纪律有多软弱?我不能强迫计算机做我想做的事情。您在这里描述的
struct stat
不在POSIX中:。要详细说明源代码吗?HP-UX 11和AIX5.x只有
time\t
。Linux(SLES 10)和Solaris 10都有
struct timespec
,但其名称/访问方式甚至不统一。您上面引用的内容来自Solaris 10,不能在任何其他系统上使用。投票结果如下。@Dummy00001,在POSIX.1-2008(第7期)中。您现在看到的是2004年版(第6期)。请点击我提供的链接了解详细信息,这里重复:@paxdiablo:谢谢。注意到了。尽管从POSIX版本获得一个实际上不受支持的解决方案仍然不是很有用。目前,最好的可移植性是通过使用POSIX5实现的(或者说如果运气好的话使用POSIX 6)。一边。另一方面,它仍然毫无用处,因为大多数文件系统的精度都只有秒。上帝保佑女王。。您在这里描述的
struct stat
不在POSIX中:。要详细说明源代码吗?HP-UX 11和AIX5.x只有
time\t
。Linux(SLES 10)和Solaris 10都有
struct timespec
,但其名称/访问方式甚至不统一。您上面引用的内容来自Solaris 10,不能在任何其他系统上使用。投票结果如下。@Dummy00001,在POSIX.1-2008(第7期)中。您现在看到的是2004年版(第6期)。请点击我提供的链接了解详细信息,这里重复:@paxdiablo:谢谢。注意到了。尽管从POSIX版本获得一个实际上不受支持的解决方案仍然不是很有用。目前,最好的可移植性是通过使用POSIX5实现的(或者说如果运气好的话使用POSIX 6)。一边。另一方面,它仍然毫无用处,因为大多数文件系统的精度都只有秒。上帝保佑女王。。和POSIX。