为什么我不能设置大于2 ^ 32的time_t?

时间:2012-10-04 21:15:44

标签: c fuse time-t

我在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.然而,当我编译我的代码并打开警告时,我得到了

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

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

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

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

1 个答案:

答案 0 :(得分:6)

1 << 39中,您正在转移int而不是time_t