曲径通幽论坛

标题: getpw() -- 获取指定用户在密码文件中的数据 [打印本页]

作者: beyes    时间: 2011-12-26 11:55
标题: getpw() -- 获取指定用户在密码文件中的数据
getpw() 原型如下:
[C++] 纯文本查看 复制代码
#include <sys/types.h>
#include <pwd.h>
int getpw(uid_t uid, char *buf);

该函数通过指定用户的 uid ,然后在 /etc/passwd 文件中查找对应的用户数据,并将这些数据返回到参数 buf 中。

/etc/passwd 文件中的域构成如下:
name:passwd:uid:gid:gecos:dir:shell[/mw_shl_code]
name 表示用户名;
passwd 表示用户密码,使用 shadow 的系统不会将密码直接存放在此,取而代之的是 'x' 字符。
uid 表示用户 ID;
gid 表示用户组 ID;
gecos 表示用户信息;
dir 表示 home 目录;
shell 表示用户所用的 shell 。

上面这些信息都保存在 passwd 结构里,定义如下:
[C++] 纯文本查看 复制代码
struct passwd {
               char   *pw_name;       /* username */
               char   *pw_passwd;     /* user password */
               uid_t   pw_uid;        /* user ID */
               gid_t   pw_gid;        /* group ID */
               char   *pw_gecos;      /* user information */
               char   *pw_dir;        /* home directory */
               char   *pw_shell;      /* shell program */
           };

该结构定义在 pwd.h 文件中。

测试代码
[C++] 纯文本查看 复制代码
#include <stdio.h>
#include <pwd.h>
#include <sys/types.h>

int main()
{
    char buffer[128];

    getpw(1000, buffer);

    printf ("%s\n", buffer);

    return 0;
}

运行输出:
./getpw
beyes:x:1000:100:beyes:/home/beyes:/bin/bash

注意:该函数存在安全问题,不赞同使用,可以考虑使用 getpwent() 取代之。




欢迎光临 曲径通幽论坛 (http://www.groad.net/bbs/) Powered by Discuz! X3.2