[函数]getpwuid/getpwnam & getgrgid/getgrnam
口令文件读取函数getpwuid和getpwnam以及组文件读取文件getgrgid和getgrnam函数的使用。
【此方法,可以间接由uid得到uname,由gid得到gname】
下面的代码可以读出当前用户的相关信息:
#include <stdio.h>
#include <stdlib.h>
#include <pwd.h>
int main(void)
{
struct passwd *passwd = getpwuid(getuid();
if ( passwd == NULL )
{
err_sys(“getpwuid error”);
}
else
{
printf(“pw_name : %sn”, passwd->pw_name);
printf(“pw_passwd : %sn”, passwd->pw_passwd);
printf(“pw_uid : %dn”, passwd->pw_uid);
printf(“pw_gid : %dn”, passwd->pw_gid);
printf(“pw_age : %sn”, passwd->pw_age);
printf(“pw_comment : %sn”, passwd->pw_comment);
printf(“pw_gecos : %sn”, passwd->pw_gecos);
printf(“pw_dir : %sn”, passwd->pw_dir);
printf(“pw_shell : %sn”, passwd->pw_shell);
}
exit(EXIT_SUCCESS);
}
下面的代码可以读出当前用户所在组的相关信息:
#include <stdio.h>
#include <stdlib.h>
#include <grp.h>
int main(void)
{
int index = 0;
struct group *gr;
gr = getgrgid(getgid());
if ( gr == NULL )
{
err_sys(“getgrgid error”);
}
else
{
printf(“gr->gr_name : %sn”, gr->gr_name);
printf(“gr->gr_passwd : %sn”, gr->gr_passwd);
printf(“gr->gr_gid : %dn”, gr->gr_gid);
while ( *(gr->gr_mem + index) != NULL )
{
/* 其中字段gr_mem是一个字符指针数组,其每个指针各指向一个属于该组的用户名,该指针数组以空指针NULL结尾 */
printf(“gr->gr_mem : %sn”, *(gr->gr_mem + index));
++index;
}
}
exit(EXIT_SUCCESS);
}