曲径通幽论坛

 找回密码
 立即注册
搜索
查看: 3641|回复: 0
打印 上一主题 下一主题

[用户与组] getpw() -- 获取指定用户在密码文件中的数据

[复制链接]

4918

主题

5880

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34397
跳转到指定楼层
楼主
发表于 2011-12-26 11:55:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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() 取代之。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|曲径通幽 ( 琼ICP备11001422号-1|公安备案:46900502000207 )

GMT+8, 2025-6-18 11:46 , Processed in 0.082445 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表