【发布时间】: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 << 39) - 1 -
@Mystical
(time_t)1<<39怎么样? -
下次尝试理解编译器警告和错误。并且,也许,获得一本关于 C 的好书或 C 标准(或其草案)的副本。