Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Perl库函数将UID映射到用户名?_Perl_Unix - Fatal编程技术网

如何使用Perl库函数将UID映射到用户名?

如何使用Perl库函数将UID映射到用户名?,perl,unix,Perl,Unix,我正在寻找一种使用Perl将uid(表示系统用户的唯一数字)映射到用户名的方法 请不要建议greping/etc/passwd:) 编辑 作为澄清,我并不是在寻找一个明确阅读/etc/passwd的解决方案。我意识到任何解决方案最终都会这样做,但我正在搜索一个库函数来为我执行此操作。读取/etc/passwd并将UID哈希到登录名 编辑: 如您所见,无论您选择哪一个,系统调用都从/etc/passwd读取(请参阅以供参考)实际上,我建议基于/etc/passwd:-)构建一个哈希,这应该可以很好

我正在寻找一种使用Perl将uid(表示系统用户的唯一数字)映射到用户名的方法

请不要建议
grep
ing/etc/passwd:)

编辑


作为澄清,我并不是在寻找一个明确阅读/etc/passwd的解决方案。我意识到任何解决方案最终都会这样做,但我正在搜索一个库函数来为我执行此操作。

读取/etc/passwd并将UID哈希到登录名

编辑:


如您所见,无论您选择哪一个,系统调用都从/etc/passwd读取(请参阅以供参考)

实际上,我建议基于/etc/passwd:-)构建一个哈希,这应该可以很好地工作,因为用户ID必须是唯一的。

标准函数,就像相同的C函数一样,根据其ID获取用户信息。否
use
s所需:

my ($name) = getpwuid(1000);
print $name,"\n";

尽管它最终会读取
/etc/passwd
文件,但使用标准界面让其他用户看得更清楚,更不用说它会为您节省一些按键操作了。

不要否决投票。无论您做什么,最终您(或系统调用)都将从/etc/passwd读取和散列。并且无论您grep哪个文件,CPU最终将执行汇编命令,所以为什么不在assembler中编写所有代码呢?因此,你以自己的方式
grep
文件,然后你想,投赞成票:直接读取文件永远不应该是你的第一个工具。一个好的答案应该是将内置作为默认选项,并将读取
/etc/passwd
作为一种可能的优化。还有:告诉人们如何投票?好笑,有建设性的反馈吗?您还可以通过其他方式获得有关用户/用户ID的信息吗?因为我正在寻找一个perl库来为我实现这一点。我知道,在某些情况下,它涉及到读取/etc/password。我看不出您在问题中提出了这一点:-)我也不太了解“库”的好处。这是一个文件管理员,您需要库来读取冒号分隔的值吗?是的,拥有一个库总是更有价值的,即使任务很琐碎。此外,库调用可以实现为使用其他数据库,如YP/NIS/NIS+/LDAP/等。此外,也可以替代
/etc/passwd
。不是所有的系统都是独立的。好吧,出于好奇,我制作了一个小脚本。我调用
getpwuid(1000)5次。实际上是一排。然后我
strace
并grep输出。这是什么?它可能会调用“
open
”5次吗?对这是针对同一用户的。现在我明白了,4个额外的I/O调用完全值得额外的击键。@nc3b如果我对性能感兴趣,我会用C语言来做。我在优化开发时间,而不是资源使用。(注意,在我当前的环境中,Perl是实现这一点的最佳语言)
getpwuid
不能假定自上次调用以来
/etc/passwd
文件没有更改,尽管这种可能性不大。mobrule是正确的<代码>/etc/passwd
可以随时更改。如果您担心用户查找的性能,只需记住
getpwuid
的结果(并准备好接受后果!)就可以始终使用/etc/passwd的时间戳作为假设缓存过期的基础
my ($name) = getpwuid(1000);
print $name,"\n";