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

Tne*_*ppa 0 c time-t fuse

我在C中乱搞FUSE,我想创建一个看起来将在未来创建的文件.我在FUSE中编写的自定义stat()函数写入struct stat*stbuf,我想做类似的事情

stbuf->st_ctime = (1 << 39) - 1;
Run Code Online (Sandbox Code Playgroud)

为了创造一个创造日期,将来会有一段荒谬的时间.

我在64位Linux系统上运行它,所以我希望我的time_t是64位值,实际上,如果我只是printf("%d \n",(int)sizeof(x)); 为了测试我的程序中time_t的大小,我得到8.然而,当我编译我的代码并打开警告时,我得到了

warning: left shift count >= width of type [enabled by default]
Run Code Online (Sandbox Code Playgroud)

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

1969-12-31 15:59:59.000000000 -0800
Run Code Online (Sandbox Code Playgroud)

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

Jen*_*edt 6

1 << 39你正在转移int而不是time_t.