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文件中添加一条新的注销记录,清除其ut_name字段。在系统重启、时间和日期变更时,wtmp文件中会添加特殊记录项。who命令读取utmp文件并以可读格式打印其内容,而last命令读取wtmp文件并打印所选记录。

随着UNIX版本的演变,utmp和wtmp文件中的信息量也有所增加。在SVR2中,结构体扩展至36字节,而在SVR4中扩展至350字节。SVR4版本中的详细记录格式请参见手册页utmp(4)和utmpx(4)。这两个文件位于目录/var/adm中。SVR4还提供了许多函数(见getut(3)和getutx(3))用于读写这两个文件。4.3+BSD版本中的登录记录格式请参见手册页utmp(5),文件路径为/var/run/utmp和/var/log/wtmp。

POSIX.1定义了uname函数,用于返回与主机和操作系统有关的信息:


#include <sys utsname.h="">

int uname(struct utsname *name);

</sys>

相关文件下载:

  1. POSIX系统多线程编程指导

  2. 登录以及登录记录

  3. UNIX POSIX API

提供的文件可以进一步了解POSIX标准和多线程编程相关的内容,这些资源对于深入理解和操作UNIX系统中的登录记录和系统标识非常有帮助。