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之类的),主机名称一般是在系统启动脚本中被设置的。



京公网安备 11010502036488号