who命令是通过读取一个文件名叫做utmp的文件获得正在使用系统的用户信息的。这个文件里保存的是结构数组,数组元素的类型是utmp,可以在utmp.h文件中找到这种类型的定义:

不同平台上这个结构可能不完全相同,Backwards compatibility hacks 下面的字段更有可能不同,但大部分字段是相同的。

其中,who命令用到的字段有:

  • ut_user,保存用户名
  • ut_line,保存设备名,也就是用户的终端类型
  • ut_host,保存用户登陆的远程计算机的名字
  • ut_time,保存登陆时间
  • ut_type,保存用户当前的登陆状态,who命令只展示USER_PROCESS状态的用户

有了这些信息,写出who命令就不是什么难事了。