我已经阅读了 Advanced Unix 中进程记帐的概念。我了解这些记帐记录通常是少量二进制数据,其中包含命令名称、使用的 CPU 时间量、用户 ID 和组 ID、进程的启动时间等。但我不明白如何acct
访问该结构。
struct acct ac_data;
如何访问acct
结构以及如何启用和禁用进程记帐?
我已经阅读了 Advanced Unix 中进程记帐的概念。我了解这些记帐记录通常是少量二进制数据,其中包含命令名称、使用的 CPU 时间量、用户 ID 和组 ID、进程的启动时间等。但我不明白如何acct
访问该结构。
struct acct ac_data;
如何访问acct
结构以及如何启用和禁用进程记帐?
首先,值得注意的是,在某些系统上,进程记帐默认禁用(我知道它在我的特定 Linux 系统和最新的 macOS 10.12 上默认禁用)。这是因为许多人认为使用二进制文件进行日志记录违反了Unix 哲学,特别是这部分:
编写程序来处理文本流,因为这是一个通用接口。
综上所述,您需要做一些主要的事情:
打开进程记帐。您可以使用acct(2)
命令执行此操作,我建议您查看系统的联机帮助页,但这里有一些在线 Linux 的。您可以使用此命令指定要登录的位置,或用于NULL
关闭进程记帐。
读入会计记录。为此,您需要fread(3)
从文件中读取二进制数据的函数。请注意,这不是跨平台的,因为每个系统可能有不同的acct
结构字段(在这里您可以看到二进制接口的问题)。再次,我强烈建议您阅读手册页fread
,他们非常清楚如何使用它。
读取结构的字段。一旦你acct
在你的程序中得到了这个结构,你就可以像访问任何其他结构一样访问这些字段。要知道您可以使用哪些字段,请再次阅读手册页。此页面显示一个特定系统上的字段。
您可能已经注意到,这里的一个常见主题是阅读联机帮助页。它们非常简洁,我认为这是拼凑特定系统如何工作的好方法。在man 5 acct
您的系统上输入,您将拥有您需要知道的一切!