0

基于sys/acct.h(V1,不是 V3),我需要基于逐行解析 acct 文件的解析器收集一些用户使用统计信息。解析器将每 N 秒运行并解析整个文件,我需要收集自上次运行以来累积的用户统计信息(N 秒后)。根据 sys/acct.h 提供的信息,我不确定最合适的方法是什么。

也许是这样的:

if ((ac_btime + ac_etime) < (current_time - N)) { gather; }

comp_t 也被称为“由 3 位、以 8 为底的指数和 13 位尾数组成的浮点值”,但我认为 u_int16_t 只是一个无符号短整数。我是否应该使用提供的公式将其转换为 long 它?

4

1 回答 1

0

您需要屏蔽指数并移动尾数。您链接到的文件显示了如何:

v = (c & 0x1fff) << (((c >> 13) & 0x7) * 3);

您可以将其中的某些内容转换为更大的类型,以确保编译器使用您想要的大小,但请注意不要对错误的部分执行此操作,否则您会得到错误的结果。无论如何,它不应该是必要的,但尝试一下也不会有什么坏处:

v = (c & 0x1fff) << (((c >> 13) & 0x7) * 3L);
于 2010-04-06T17:41:22.650 回答