【问题标题】:Why can't I set a time_t larger than 2^32?为什么我不能设置大于 2^32 的 time_t?
【发布时间】:2012-09-26 00:12:24
【问题描述】:

我在 C 语言中使用 FUSE,我想创建一个似乎会在很远的未来创建的文件。我在 FUSE 中编写的自定义 stat() 函数写入 struct stat* stbuf,我想做类似的事情

stbuf->st_ctime = (1 << 39) - 1;

要让创建的日期在未来很长一段时间内。

我在 64 位 linux 系统上运行它,所以我希望我的 time_t 是一个 64 位值,事实上,如果我只是 printf("%d\n",(int) sizeof(x) );在我的程序中测试 time_t 的大小我得到 8。但是,当我在打开警告的情况下编译我的代码时,我得到 ​​p>

warning: left shift count >= width of type [enabled by default]

以及当我在已安装的文件系统中统计文件时的更改时间

1969-12-31 15:59:59.000000000 -0800

好像实际值是 0。有谁知道为什么在应该有 64 位 time_t 的 64 位系统上发生这种情况?

【问题讨论】:

  • 试试:(1LL &lt;&lt; 39) - 1
  • @Mystical (time_t)1&lt;&lt;39 怎么样?
  • 下次尝试理解编译器警告和错误。并且,也许,获得一本关于 C 的好书或 C 标准(或其草案)的副本。

标签: c fuse time-t


【解决方案1】:

1 &lt;&lt; 39 中,您正在转移 int 而不是 time_t

【讨论】:

    猜你喜欢
    • 2013-10-19
    • 1970-01-01
    • 1970-01-01
    • 2017-12-01
    • 2015-11-30
    • 1970-01-01
    • 1970-01-01
    • 2017-10-31
    • 2011-02-07
    相关资源
    最近更新 更多