我正在这样的文件中编写一个time_t变量(但是也以同样的方式读取它,而不是write,现在我使用read):
//写入时间
file fd;
time_t currentTime;
currentTime = time(0); // current time
fd.create(filepath);
fd.open(filepath);
fd.seek(SEEK_SET,0);
fd.write(¤tTime,sizeof(time_t));
fd.close();
//读取时间
file fd;
time_t timeFromFile;
fd.open(filepath);
fd.seek(SEEK_SET,0);
fd.read(&timeFromFile,sizeof(time_t));
上述方法有什么问题吗?(此外,它正在工作,正如我所检查的)。
附注:我写的是一个嵌入式设备,所以我不认为可移植性等应该是一个问题。我认为这将运行大部分类似类型的设备。
虽然没有定义,但它几乎总是一个整数值,包含1970年1月1日00:00以来的秒数,对应于POSIX时间。
但是,如果你总是从同一个平台和编译器读写,那应该没问题。值得注意的是,虽然大多数系统将时间表示为一个整数,但有些系统可能有不同的大小。最初,
2038年问题可能会导致一些计算机软件在2038年附近的某个点出现故障。该问题影响所有软件和系统,它们都将系统时间存储为带符号的32位整数,并将该数字解释为自UTC时间1970年1月1日星期四00:00:00以来的秒数。
如果您正在为使用不同头文件(特别是
防止问题的最好方法是在编译时。如果您能够使用C++11编译器,则可以使用
static_assert( sizeof(time_t) == 8, "Unexpected time_t size" );
如果编译所针对的目标使用不同的大小,则代码将无法编译,并将防止无法解释的错误。如果您认为这是一个可能的问题,那么您应该以另一种方式序列化自己的时间。
根据POSIX:
time_t和clock_t应为整数或实浮动类型。
因此,只要不需要在其他设备上读取它们,将它们写入这样的文件是完全合理的。