1.口令文件
- 口令文件存储在/etc/passwd文件中
- root用户的ID为0
- 两个获取口令文件项的函数
struct passwd *getpwnam(const char *name);
struct passwd *getpwuid(uid_t uid);
getpwuid函数是将i节点中的用户ID映射为用户登录名。
2. 阴影口令
- 系统的加密口令一般存放在,阴影口令文件里,它至少存储了用户名和加密口令,其他文件信息也可以存放,用下面的函数可以获取阴影口令文件
#include <shadow.h>
struct spwd *getspnam(const char *name);
struct spwd *getspent(void)
3. 组文件
uinx下的组文件包含信息定义在grp.h下的group结构体
char *gr_name The name of the group.
gid_t gr_gid Numerical group ID.
char **gr_mem Pointer to a null-terminated array of character
pointers to member names.
字段gr_mem是一个指针数组,其中每个指针指向一个属于该组的用户名,以空指针结尾
4. 其他数据文件
除了上述的组文件、口令文件,系统中还有其他数据文件,它们的接口和上面的很类似,一般情况下,每个数据文件至少有三个函数:
- get函数 : 读下一个记录,如果需要,还可以打开文件,通常返回一个指向结构的指针。
- set函数: 打卡数据文件
- end函数: 关闭相应数据文件
5. 登录账户记录
unix系统通常提供两个文件:utmp文件,记录当前登录系统的各个用户,wtmp文件,跟踪各个登录和注销事件。
登陆时,login程序将信息写进utmp和wtmp文件中,注销时,init进程将utmp文件的记录清除,并将一个新纪录写到wtmp文件中,在wtmp文件的注销记录中,将ut_name字段清0。
6. 系统标识
POSIX.1 定义了uname函数,它可以返回当前主机和操作系统的信息:
#include <sys/utsname.h>
int uname(struct utsname *buf);
当然uname命令也可以查看,utsname结构体提供了以下字段:
struct utsname {
char sysname[]; /* Operating system name (e.g., "Linux") */
char nodename[]; /* Name within "some implementation-defined
network" */
char release[]; /* Operating system release (e.g., "2.6.28") */
char version[]; /* Operating system version */
char machine[]; /* Hardware identifier */
};
每个字符串都以null结尾。
7. 时间和日期
用下面的函数获取时间日期
#include <time.h>
time_t time(time_t *t);
除此之外,uinx系统还提供了更高精度的时间,比如微秒,当获取时间后,它需要转化为人们可读的时间格式,以下是它的调用过程: