6、其他系统数据文件
(本节对应原书的第6、7两节)
前面只说了两种数据文件,不同系统的密码文件,以及密码加密文件,其名称和位置可能会有所不同,具体参见参考资料。
实际上还有许多其他的数据文件,例如 /etc/services
, /etc/protocols
, /etc/networks
等。
所幸访问这些文件都有和前面的 passwd
等文件有类似的接口函数,这些函数分别是:
- 一个
get
函数用来获取下一条记录,如果必要的话会打开文件。这些函数一般会返回一个指向结构的指针。如果到达了文件的结尾,那么大多数函数会返回null
.大多数的get
函数返回一个指向静态结构的指针,所以如果我们要保存其值,我们需要自己拷贝一份。 - 一个
set
函数,如果文件没有打开,那么这个函数会首先打开文件。这个函数会对文件进行rewinds
.这个函数在我们想要从头遍历文件的时候会被使用到。 - 一个
end
函数,这个函数用来关闭文件。如同我们前面提到的那要,我们经常需要在访问之后调用这个函数来关闭所有的文件。
译者注
原文参考
7、登录登记
大多数 unix
系统都提供了两个文件: utmp
和 wtmp
。 utmp
只记录当前登录的所有用户, wtmp
记录所有的登录和登出记录。两者中的数据是用" struct utmp
"类型的结构变量保存的。
在登录的时候, login
程序会向 utmp
写入一个用 struct utmp
结构表示的数据项。
在登出的时候, utmp
相应数据项会被 init
清空为 null
比特;然后一个新的条目会被追加到 wtmp
文件中, wtmp
中 logout
相关条目中的 ut_name
会自动变成零。
特定的条目会被追加到 wtmp
文件中用来标记系统什么时候重启,以及系统时间变化的前后(???什么意思???)。 who
命令会读取 utmp
文件,并且打印这个文件的内容。稍后版本的 UNIX
系统提供了 last
命令,这个命令会读取 wtmp
文件,并且打印选定的条目的相关信息。
solaris
的 utmpx(4) man
手册给出了记录格式的描述信息, FreeBSD 5.2.1
, Linux 2.4.22
, 和 Mac OS X 10.3
的记录格式描述信息在 man
手册 utmp(5)
中。
译者注
原文参考
8、系统信息
获取当前主机和操作系统信息的函数:
#include <sys/utsname.h>
int uname(struct utsname *name);
这个函数会返回一个结构,我们也可以通过命令uname来获得这个结构的信息。成功返回0,失败返回1(实际值一般为-1)。
获取主机名称的信息,由于历史原因在BSD系列中有所提供,现在被放入了POSIX.1中:
#include <unistd.h>
int gethostname(char *name, int namelen);
成功返回0,失败返回1(实际值一般为-1)。
namelen指定name缓存的长度,如果长度足够,那么字符串以NULL结束,否则字符串是否以NULL结束是没有定义的。
有一个hostname命令,用来设置和获取主机名称信息(主机名称的设置需要用超级用户,函数是类似sethostname之类的),主机名称一般是在系统启动脚本中被设置的。