您正在从Perl 5.14.2中查看此文档的版本。查看最新版本
getpwnam名称
getgrnam名称
gethostbyname名称
getnetbyname名称
getprotobyname名称
getpwuid UID
获取grgid GID
getservbyname姓名,PROTO
gethostbyaddr地址,地址类型
getnetbyaddr地址,地址类型
获取原型编号
获取服务端口,PROTO
获取(getpwent)
格格伦特
女招待
格内特
获取原型
获取服务
设置(setpwent)
setgrent公司
主持人STAYOPEN
setnetent STAYOPEN公司
setprotent STAYOPEN公司
设置服务STAYOPEN
末端末端
结束
末端宿主
末端
末端原生质体
终端服务商

这些例程与系统C库中的对应例程相同。在列表上下文中,各个get例程的返回值如下:

($name、$passwd、$uid、$gid、,$quota、$comment、$gcos、$dir、$shell、$expire)=获取密码*($name,$passwd,$gid,$members)=获取*($name,$aliases,$addrtype,$length,@addrs)=获取主机*($name,$aliases,$addrtype,$net)=getnet*($name,$alias,$proto)=getproto*($name,$aliases,$port,$proto)=获取服务*

(如果条目不存在,则会得到一个空列表。)

$gcos字段的确切含义各不相同,但它通常包含用户的真实姓名(与登录名相反)和与用户相关的其他信息。然而,请注意,在许多系统中,用户可以更改此信息,因此它不可信,因此$gcos受到了污染(请参阅秘鲁石油公司). 出于同样的原因,用户的加密密码和登录shell$passwd和$shell也受到了污染。

在标量上下文中,您可以获得名称,除非函数是按名称查找的,在这种情况下,您可以获取其他内容,无论它是什么。(如果条目不存在,则会获得未定义的值。)例如:

$uid=getpwnam($name);$名称=getpwuid($num);$名称=getpwent();$gid=getgrnam($name);$名称=getgrgid($num);$名称=getgrent();#等。

获取密码*()字段$quota、$comment和$expire是特殊的,因为它们在许多系统上不受支持。如果$quota不受支持,则它是空标量。如果支持,它通常会对磁盘配额进行编码。如果$comment字段不受支持,则它是一个空标量。如果支持,它通常会对用户的一些管理注释进行编码。在某些系统中,$quota字段可能是$change或$age,这些字段与密码老化有关。在某些系统中,$comment字段可能是$class。$expire字段(如果存在)对帐户或密码的有效期进行编码。有关这些字段在您的系统中的可用性和确切含义,请咨询getpwnam(3)和您的系统密码。小时文件。您还可以通过使用配置模块和值d_pw配额,d_页面,d_pw更改,d_pw注释、和d_pweire(_P)到期只有当您的供应商以直观的方式实现了卷影密码文件,即当您在特权下运行或存在System V(包括Solaris和Linux)中的卷影(3)函数时,调用常规C库例程会获得卷影版本,才支持卷影密码文件。不太可能支持那些实现专用影子密码功能的系统。

返回的$members值获取gr*()是以空格分隔的组成员登录名列表。

对于获取主机*()函数,如果h错误号变量在C中受支持,它将通过返回给您$?如果函数调用失败。这个@地址成功调用返回的值是相应库调用返回的原始地址列表。在Internet域中,每个地址都是四个字节长;你可以这样说:

($a,$b,$c,$d)=解包('W4',$addr[0]);

Socket库使这一点稍微容易:

使用Socket;$iaddr=inet_aton(“127.1”);#或其他地址$名称=gethostbyaddr($iaddr,AF_INET);#或者走另一条路$straddr=inet_ntoa($iaddr);

相反,要将主机名解析为IP地址,可以这样写:

使用Socket;$packed_ip=获取主机名(“www.perl.org”);if(定义$packed\ip){$ip_address=inet_ntoa($packed_ip);}

确保在SCALAR上下文中调用<gethostbyname()>,并检查其返回值的定义。

如果您厌倦了记住返回列表中的哪个元素包含哪个返回值,则在标准模块中提供了按名称命名的接口:文件::stat,Net::招待,网络::netent,网络::协议,网络::servent,时间::gmtime,时间::当地时间、和用户::grent。它们覆盖了普通的内置程序,提供了为每个字段返回具有适当名称的对象的版本。例如:

使用文件::stat;使用用户::pwent;$is_his=(stat($filename)->uid==pwent($wherever)->uid);

尽管看起来它们是相同的方法调用(uid),但实际上不是,因为文件::stat对象不同于用户::pwent对象。