实现who命令前要先了解其功能:
who命令可以查看当前已经登录的用户的信息,包括其用户名,终端名和登录时间,先在自己电脑上试一下:

书上查阅了联机帮助文档后明确了一点:who展示的信息来自于/var/adm/utmp 这个文件,书上通过进一步查阅得知,utmp这个文件存放的是一个结构体数组,此结构体被定义在/usr/include/utmp.h这个头文件中,以下是我的电脑上的utmp.h:

其中,ut_name保存的是用户名,ut_line保存的是终端名,ut_time保存登录时间,ut_host保存用于登录的远程计算机的名字。
那么我们怎么读取这个文件?
之前第一章我们用过fgets,它可以读取指定数量的字符,但它不适用于当前情况,至于具体为什么,书上没有说。我查了不少资料,感觉都讲得模棱两可,我说下我理解的吧,因为当前要读的是一个数据结构,而fgets又是以文本方式来处理读取到的内容,所以可能会把数据当文本处理,这一点不是很确定,只能说fgets一般用于读取文本内容吧。另外一点就是fgets读取时,如果文件中包含的字符数不够,系统会自动在后面补'