2

我已经阅读了 Advanced Unix 中进程记帐的概念。我了解这些记帐记录通常是少量二进制数据,其中包含命令名称、使用的 CPU 时间量、用户 ID 和组 ID、进程的启动时间等。但我不明白如何acct访问该结构。

struct acct ac_data;

如何访问acct结构以及如何启用和禁用进程记帐?

4

1 回答 1

0

首先,值得注意的是,在某些系统上,进程记帐默认禁用(我知道它在我的特定 Linux 系统和最新的 macOS 10.12 上默认禁用)。这是因为许多人认为使用二进制文件进行日志记录违反了Unix 哲学,特别是这部分:

编写程序来处理文本流,因为这是一个通用接口。

综上所述,您需要做一些主要的事情:

  1. 打开进程记帐。您可以使用acct(2)命令执行此操作,我建议您查看系统的联机帮助页,但这里有一些在线 Linux 的。您可以使用此命令指定要登录的位置,或用于NULL关闭进程记帐。

  2. 读入会计记录。为此,您需要fread(3)从文件中读取二进制数据的函数。请注意,这不是跨平台的,因为每个系统可能有不同的acct结构字段(在这里您可以看到二进制接口的问题)。再次,我强烈建议您阅读手册页fread,他们非常清楚如何使用它。

  3. 读取结构的字段。一旦你acct在你的程序中得到了这个结构,你就可以像访问任何其他结构一样访问这些字段。要知道您可以使用哪些字段,请再次阅读手册页。此页面显示一个特定系统上的字段。

您可能已经注意到,这里的一个常见主题是阅读联机帮助页。它们非常简洁,我认为这是拼凑特定系统如何工作的好方法。在man 5 acct您的系统上输入,您将拥有您需要知道的一切!

于 2017-01-03T10:37:39.690 回答