口令文件读取函数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);
}