C语言 获取一天中的时间()失败,错误为75

js5cn81o  于 2023-01-08  发布在  其他
关注(0)|答案(2)|浏览(144)

在Android 12手机中执行的程序中的以下代码:

struct timeval tv;
int ret = gettimeofday(&tv, NULL);
if (ret < 0)
    printf("gettimeofday failed with %s\n", strerror(errno));
printf("%lu.%ld\n", tv.tv_sec, tv.tv_usec);

退货

gettimeofday failed with Value too large for defined data type
1078605538.1

此外,seconds和useconds始终是常量,即使在循环中调用也是如此。
一定是出了什么问题,因为根据手册页,gettimeofday()不应该返回errno 75。
空间输出:

read(3, " \0\0\0\1\0\0\0\273\0\0\0\230\1\0\0\1\0\0\0\20\0\254\0\254\0\223\261zG\377F"..., 65536) = 199
clock_gettime(CLOCK_REALTIME, {tv_sec=3416400658881740019, tv_nsec=4632575514938983213}) = 0
dup(2)                                  = 4
fcntl64(4, F_GETFL)                     = 0x20002 (flags O_RDWR|O_LARGEFILE)
statx(4, "", AT_STATX_SYNC_AS_STAT|AT_NO_AUTOMOUNT|AT_EMPTY_PATH, STATX_BASIC_STATS, {stx_mask=STATX_BASIC_STATS, stx_attributes=0, stx_mode=S_IFCHR|0600, stx_size=0, ...}) = 0
write(4, "gettimeofday: Value too large fo"..., 52gettimeofday: Value too large for defined data type
) = 52
close(4)
[ and same repeats, we are in a loop ]
xlpyo6sf

xlpyo6sf1#

原来这是一个Android相关的问题,在从使用arm-linux-gnueabi-gcc交叉编译切换到使用ndk-build之后,这个问题得到了解决。
不完全确定根本原因,但Makefile中的某些东西关闭了。

8ljdwjyq

8ljdwjyq2#

我认为这是最近Android内核的一个倒退。注意这只影响运行在64位内核上的32位ARM代码。可能你的NDK目标是AArch64。

相关问题