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>
相关文件下载:
提供的文件可以进一步了解POSIX标准和多线程编程相关的内容,这些资源对于深入理解和操作UNIX系统中的登录记录和系统标识非常有帮助。
暂无评论