《APUE》第6章笔记

时间:2021-05-18 00:22:32

这一章主要介绍了口令文件和组文件的结构和一些围绕这些结构的函数。

口令文件即passwd就是在/etc/passwd中可以查阅。其结构是:

《APUE》第6章笔记

上图四个平台能支持的就用黑点表示。

因为加密口令这一项放在passwd这个人人可读的文件中,可能会有安全问题。所以现在的Linux中的加密口令都是放在/etc/shadow中,只有root用户才可以查看。而在passwd文件中加密口令这一项则显示为x。(每一项都是用冒号隔开的)

POSIX.1就定义了两个函数来让我们获取用户名或者数值用户ID。

#include <pwd.h>

struct passwd *getpwuid(uid_t uid);

struct passwd *getpwnam(const char *name);

返回值:成功返回指针,失败返回NULL

如果有些程序要查看整个口令文件,则需要下面三个函数:

#include <pwd.h>

struct passwd *getpwent(void);

返回值:成功返回指针,失败返回NULL

void setpwent(void);

void endpwent(void);

getpwent是查看口令文件中的一项内容,setpwent是定位到文件的开始处(相当于rewind函数),endpwent就是关闭口令文件。

组文件也差不多,结构上是这样:

《APUE》第6章笔记

其中最后一项的指针元素都是指向各个用户名,最后以空指针结束。

与口令文件的函数相似,POSIX.1也定义了两个函数来查看文件中的组ID和组名:

#include <grp.h>

struct group *getgrgid(gid_t gid);

struct group *getgrnam(const char *name);

返回值:成功返回指针,失败返回NULL

如果需要得知整个组文件的信息,也有类似口令文件的三个函数:

#include <grp.h>

struct group *getgrent(void);

返回值:成功返回指针,失败返回NULL

void setgernt(void);

void endgrent(void);