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 APIISO 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系统编程手册