将时间()打印到文件会产生二进制字符

时间:2015-09-21 21:05:26

标签: c++ time binary cout

我想将时间打印到输出文件。我使用以下代码来执行此操作:

time_t currentTime;
struct tm *localTime;

time( &currentTime );                   // Get the current time
localTime = localtime( &currentTime );  // Convert the current time to the local time
int Day    = localTime->tm_mday;
int Month  = localTime->tm_mon + 1;
int Year   = localTime->tm_year + 1900;
int Hour   = localTime->tm_hour;
int Min    = localTime->tm_min;
int Sec    = localTime->tm_sec;

output << "SimpleLD run at " << Day << "/" << Month << "/" << Year << " " << Hour << ":" << Min << ":" << Sec << std::endl;

其中output是输出文件。我在多个处理器上运行代码,但只有0级处理器写入文件。对于某些运行,(4,8,16个核心),这是正常的。但对于其他人(32,64个核心),这会导致输出文件打印:

00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\

该文件认为它是二进制文件,而不是.txt文件。一些较高的核心数可以正确打印我究竟做错了什么?无论代码运行多少核心,如何才能正确打印出来?

2 个答案:

答案 0 :(得分:1)

您的问题可能源于localtime()函数不是线程安全的事实。它返回一个指向静态缓冲区的指针,如果其他源调用localtime(),它可能会被损坏。

有一个名为localtime_r()localtime()的线程安全实现,在某些系统上可用。如果这不是一个选项,您需要确保在任何给定点只有一个线程正在调用或使用localtime()的结果。

答案 1 :(得分:0)

即使只有1个核心正在写入输出文件,我每个核心都打开了输出文件。当我只有写入输出文件的MPI等级打开它时,问题似乎就消失了。