6.7 登录会计大多数 UNIX 系统都提供下列两个数据文件:utmp 文件,它记录当前登录进系统的各个用户;wtmp 文件,它跟踪各个登录和注销事件。在 V7 中,包含下列结构的一个二进制记录写入这两个文件中:
struct utmp {
char ut_line[8]; /* tty line: "ttyh0", "ttyd0", "ttyp0", ... */
char ut_name[8]; /* login name */
long ut_time; /* seconds since Epoch */
};
登录时,login 程序填写这样一个结构,然后将其写入到 utmp 文件中,同时也将其添写到 wtmp 文件中。注销时,init 进程将 utmp 文件中相应的记录擦除(每个字节都填以 0),并将一个新记录添写到 wtmp 文件中。读 wtmp 文件中的该注销记录,其 ut_name 字段清除为 0。在系统再启动时,以及更改系统时间和日期的前后,都在 wtmp 文件中添写特殊的记录项。who(1) 程序读 utmp 文件,并以可读格式打印其内容。后来的 UNIX 版本提供 last(1) 命令,它读 wtmp 文件并打印所选择的记录。
大多数 UNIX 版本仍提供 utmp 和 wtmp 文件,但其中的信息量却增加了。V7 中 20 字节的结构在 SVR2 中已扩充为 36 字节,而在 SVR4 中,utmp 结构已扩充为 350 字节。SVR4 中这些记录的详细格式请参见手册页 utmp(4) 和 utmpx(4)。SVR4 中这两个文件都在目录 /var/adm 中。SVR4 提供了很多函数(见 getut(3) 和 getutx(3))读或写这两个文件。4.3+BSD 中登录记录的格式请参见手册页 utmp(5)。这两个文件的路径名是 /var/run/utmp 和 /var/log/wtmp。
有关详细信息和示例代码,您可以参考 UNIX POSIX API 和 ISO POSIX Linux Unix标准C函数速查手册。如果您对 UNIX 系统编程感兴趣,UNIX 系统编程手册上册 和 UNIX 系统编程手册下册 将是您不可或缺的资源。
6.8 系统标识 POSIX.1 定义了 uname 函数,它返回与主机和操作系统有关的信息。
#include <sys utsname.h="">
int uname(struct utsname *name);
</sys>
返回:若成功则为非负值,若出错则为 -1。
更多信息和系统函数的使用,请查看 IEEE POSIX手册 和 Linux UNIX系统编程手册。
暂无评论