time.h 中的 C - time() 每 128 秒更新一次它的值
C - time() in time.h updates its value every 128 seconds
我写了一个简单的代码来测试 time.h
中的函数 time()
:
// time-test.c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
float now = (float)time(NULL);
fprintf(stdout, "time() returns: %f\n", now);
return 0;
}
但是当我 运行 这段代码时,我发现 time()
只有 'refreshes' 它的值每 128 seconds.So 我的输出如下
user@ubuntu:~/workspace$ gcc -o time-test time-test.c
user@ubuntu:~/workspace$ ./time-test
time() returns: 1585473408.000000
user@ubuntu:~/workspace$ ./time-test
time() returns: 1585473408.000000
user@ubuntu:~/workspace$ ./time-test
time() returns: 1585473408.000000
再过一会儿,
user@ubuntu:~/workspace$ ./time-test
time() returns: 1585473408.000000
user@ubuntu:~/workspace$ ./time-test
time() returns: 1585473536.000000
如果你检查一下,你实际上可以看到 time()
returns 的值也是 128 的倍数。我认为这可能是操作系统故意这样做的,但我不确定。
有没有办法让值每1秒更新一次?任何帮助或推动正确的方向将不胜感激!
P.S。我在 Windows 上使用 Ubuntu 18.04 和 VMWare Workstation Pro。
在 POSIX 系统(如 Linux 或 macOS)上 time
函数 returns 自 1970 年 1 月 1 日午夜以来的秒数。这个数字现在是远远超过 10 亿(并且很快接近 2,带符号的 32 位整数将无法处理,Y2k38 problem)。
单精度浮点类型(float
的精度)不足以以如此高的精度或分辨率处理如此大的数字。
使用双精度浮点类型(如 double
)或适当的 time_t
整数类型。
我写了一个简单的代码来测试 time.h
中的函数 time()
:
// time-test.c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
float now = (float)time(NULL);
fprintf(stdout, "time() returns: %f\n", now);
return 0;
}
但是当我 运行 这段代码时,我发现 time()
只有 'refreshes' 它的值每 128 seconds.So 我的输出如下
user@ubuntu:~/workspace$ gcc -o time-test time-test.c
user@ubuntu:~/workspace$ ./time-test
time() returns: 1585473408.000000
user@ubuntu:~/workspace$ ./time-test
time() returns: 1585473408.000000
user@ubuntu:~/workspace$ ./time-test
time() returns: 1585473408.000000
再过一会儿,
user@ubuntu:~/workspace$ ./time-test
time() returns: 1585473408.000000
user@ubuntu:~/workspace$ ./time-test
time() returns: 1585473536.000000
如果你检查一下,你实际上可以看到 time()
returns 的值也是 128 的倍数。我认为这可能是操作系统故意这样做的,但我不确定。
有没有办法让值每1秒更新一次?任何帮助或推动正确的方向将不胜感激!
P.S。我在 Windows 上使用 Ubuntu 18.04 和 VMWare Workstation Pro。
在 POSIX 系统(如 Linux 或 macOS)上 time
函数 returns 自 1970 年 1 月 1 日午夜以来的秒数。这个数字现在是远远超过 10 亿(并且很快接近 2,带符号的 32 位整数将无法处理,Y2k38 problem)。
单精度浮点类型(float
的精度)不足以以如此高的精度或分辨率处理如此大的数字。
使用双精度浮点类型(如 double
)或适当的 time_t
整数类型。