3

学习 C,我试图对stat()atime/mtime 属性和 nsec 精度值返回的变量类型和大小进行视觉比较。

stat()在一个文件上运行,想从返回的 stat 结构中获取 mtime 和 mtime nsec 值,然后将这些值存储在单独的变量中(然后我想将其传递给utimes()......长篇大论!)。
根据http://www.kernel.org/doc/man-pages/online/pages/man2/stat.2.html#NOTES我可以从st_mtim.tv_nsecst_mtimensec取决于各种操作系统/构建条件获取值。在我的实际程序中,我将检查两者并使用设置的任何一个,或者只是回退到正常的秒精度st_mtime

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

我需要声明什么变量类型和大小来存储来自st_mtim.tv_nsecor的 nsec 值st_mtimensec
这些是小数吗,包括时间的整秒数?还是他们只是返回时间的 nsec 部分?

我是否需要根据我的系统架构为 nsecs 声明不同的变量大小?

最后,我需要什么转换说明符来输出这些变量printf()

干杯,B

4

2 回答 2

4
  1. st_mtime应该是一个time_t
  2. 根据 POSIX <time.h>,类型tv_nsec是 just long
  3. 类似的字段st_mtim.tv_nsec将返回纳秒数。
  4. 对于long,你需要l;因为time_t,它没有明确定义,AFAIK。
于 2012-05-23T00:37:11.743 回答
1

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

于 2012-05-23T01:48:38.090 回答