Unix编程.不知道如何使用passwd结构

Bry*_*ton 5 c unix passwd

我做了一些研究,我仍然在努力研究passwd结构.

http://www.opengroup.org/onlinepubs/000095399/basedefs/pwd.h.html

我需要获取用户ID,但我不认为我正在使用它.

int getpwuid_r(uid_t,struct passwd*,char*,size_t,struct passwd**);

此方法调用将返回一个指向结构的点,该结构将包含我需要的所有数据.我对参数相当困惑.

struct passwd.我需要先申报吗?struct passwd passwd?

我完全迷失了如何使用它.

最后,一旦我填满我的指针.我会用什么电话来获取数据?谢谢你的帮助.

caf*_*caf 7

getpwuid_r签名中:

int getpwuid_r(uid_t uid, struct passwd *pwbuf, char *buf, 
    size_t buflen, struct passwd **pwbufp);
Run Code Online (Sandbox Code Playgroud)

uid是一个输入参数 - 它是您要查找的用户的UID.其余的本质上是输出参数:指向的结构pwbuf将填充密码信息,指向的指针pwbufp将被设置为pwbuf调用成功时的值(如果不成功NULL).的bufbuflen对参数指定将被用来存储由所述的成员指出,串的用户提供的缓冲区struct passwd返回的结构.

您可以像这样使用它(这使用UID 101查找用户):

    struct passwd pwent;
    struct passwd *pwentp;
    char buf[1024];

    if (getpwuid_r(101, &pwent, buf, sizeof buf, &pwentp))
    {
            perror("getpwuid_r");
    }
    else
    {
            printf("Username: %s\n", pwent.pw_name);
            printf("Real Name: %s\n", pwent.pw_gecos);
            printf("Home Directory: %s\n", pwent.pw_dir);
    }
Run Code Online (Sandbox Code Playgroud)

如果是instread,您希望按名称查找用户以查找其ID,请使用getpwnam_r并检查pw_uid返回结构的字段.