0

sys/acct.h (V3 ではなく V1) に基づいて、acct ファイルを行ごとに解析するパーサーに基づいて、ユーザーの使用統計を収集する必要があります。パーサーは N 秒ごとに実行され、ファイル全体を解析します。最後の実行以降 (N 秒前) に蓄積されたユーザー統計を収集する必要があります。sys/acct.h によって提供される情報に基づいて、それを行うための最も適切な方法が何であるかはわかりません。

多分このようなもの:

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

また、comp_tは「3ビット、基数8の指数、13ビットの仮数からなる浮動小数点値」と言われていますが、u_int16_tは単なるunsigned short intだと思います。提供された式で長いものに変換する必要がありますか?

4

1 に答える 1

0

指数をマスクして仮数をシフトする必要があります。リンク先のファイルは、次の方法を示しています。

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

これで何かをより大きな型にキャストして、コンパイラが必要なサイズを使用するようにすることができますが、間違った部分にキャストしないように注意してください。そうしないと、間違った結果が得られます。とにかく、それは必要ではありませんが、試してみても害はありません:

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