我做了一些研究,但仍在为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
?
我只是完全不知道该怎么用这个功能。
最后,一旦我“填充”了指针,我可以使用什么调用来获取数据?
谢谢你的帮助。
3条答案
按热度按时间ubbxdtey1#
在
getpwuid_r
签名中:uid
是一个输入参数-它是您要查找的用户的UID。其余的基本上是输出参数:由pwbuf
指向的结构将被填充口令信息,并且如果调用成功则由pwbufp
指向的指针将被设置为pwbuf
的值(如果不是,则为NULL
)。buf
和buflen
参数对指定用户-提供的缓冲区,用于存储返回的struct passwd
结构的成员所指向的字符串。您可以这样使用它(这将查找UID为101的用户):
如果您希望按名称查找用户以查找其ID,请使用
getpwnam_r
并检查返回的结构体的pw_uid
字段。xeufq47z2#
首先,如果你想得到UID,那么你应该已经有了用户名,在这种情况下,你应该使用
getpwnam_r()
,这个函数的用法和getpwuid_r()
完全一样,除了你传递给它一个名称(char *)
作为第一个参数。第二,你不需要声明'struct passwd',当你包含pwd. h时就声明了。
第三,函数的确切签名为:
在上面的代码中,pwd是一个output参数,如果找到了密码,函数将返回密码。
最后,Linux
getpwnam_r
手册页中有一个完整的示例,说明如何使用getpwnam_r
,可访问here。1:此处为http://manpages.ubuntu.com/manpages/jaunty/en/man3/getpwnam.3.html
6jjcrrmo3#
好吧,首先,我不太确定你想要达到什么目的-你说你需要获得uid,但是getpwuid是用来基于uid查找其他信息的。你可能想要getpwnam,它基于用户名查找信息吗?然后你需要把uid用于另一个函数。
在任何情况下,我下面所说的一切都适用于getpwnam和getpwuid --只需将uid参数替换为username参数即可。
您的文档有点混淆了。几乎引用了手册页中的一句话:
getpwuid()函数返回一个结构指针,该结构包含密码数据库中与用户ID uid匹配的记录的断开字段。
getpwuid_r()函数获取相同的信息,但将检索到的passwd结构存储在pwbuf指向的空间中。
听起来你只是对指针有点模糊,但是,你不必为这份工作担心太多,听起来简单的版本对你来说可能是好的:
注意,在这种情况下,您不需要为指针分配内存,因为getpwuid返回一个指针,指向已分配内存并存储了信息的结构。
该结构的完整定义(其他成员的名称)在手册页中。
第二种形式getpwuid_r更适合于更仔细的错误处理和内存管理,但是如果您所需要做的只是快速查找,那么这应该是可以的。