C Linux stat()以nsec精度获得atime / mtime

时间:2012-05-23 00:11:42

标签: c linux variables stat

学习C和我试图直观地比较stat()为atime / mtime属性和nsec精度值返回的变量类型和大小。

我在文件上运行stat()并希望从返回的stat结构中获取mtime和mtime nsec值,然后将这些值存储在单独的变量中(我希望将其传递给{{1}长篇故事!) 根据{{​​3}},我可以根据各种操作系统/构建条件从utimes()st_mtim.tv_nsec获取值。在我的实际程序中,我将检查两者并使用设置的任何一个,或者只是回退到st_mtimensec的正常第二精度

我需要声明什么变量类型和大小才能存储st_mtime返回的正常时间戳?

我需要声明哪种变量类型和大小来存储来自st_mtimest_mtim.tv_nsec的nsec值?
这些是小数,包括整个秒数吗?或者他们只返回当时的nsec部分?

我是否需要为nsecs声明不同的变量大小,具体取决于我的系统架构?

最后,使用st_mtimensec输出这些变量需要哪些转换说明符?

干杯,B

2 个答案:

答案 0 :(得分:4)

  1. st_mtime应为time_t
  2. 根据POSIX <time.h>tv_nsec的类型只是long
  3. st_mtim.tv_nsec这样的字段将返回纳秒数。
  4. 对于long,您需要l;对于time_t,它没有明确定义,AFAIK。

答案 1 :(得分:1)

st_mtim.tv_nsec始终在[0,999999999]范围内。您需要从tv_sec获取秒数。从理论上讲,你可以将秒数乘以1000000000并将它们存储在64位值中,但它会在几百年左右的时间内溢出。