0

我在 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 位 time_t 的 64 位系统上发生这种情况?

4

1 回答 1

6

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

于 2012-10-04T21:19:23.777 回答