| ���������� | ����������� | �������� | ������
| ����� 1 | ����� 2 | ����� 3 | ����� 4 | ����� 5 | ����� 6 | ����� 7 | ����� 8 | ����� 9 | ����� 10
| ����� 11 | ����� 12 | ����� 13 | ����� 14 | ����� 15 | ����� 16 | ����� 17 | ����� 18 | ����� 19
| ���������� � | ���������� � | ���������� � | ���������� � |

����� 16

    � ���� �����:


������ � ��������� ����� ������

��������� ���������� � ������� � �������

���������� � ����� ���������������� ����� � ��������������, ����-��� ������� � ������� UNIX, ����������� �������. �� ���� ����, ����� ���������, ������� �� ������ �� ���� ��������� � ���� /etc/passwd, ������� ��� ������� ����� ���, ����� ���������������� ������. ���� ���� ����� ������ ������, ������������ � passwd(5), � �������� �������������� ���:

name:pa3swd:uid:gid:gcos:dir:shell

���� ���������� ��������� �������:

name

��������������� ��� ������������

passwd

������������� ������ ��� ���-������ �������, ���� ������������ ������� ���� �������

uid

������������� ������������ (��� ������������ root � 0, ��� ������� ������������� � ��������� �����)

gid

��������������� ������ �� ��������� (������ 0 ����� ���� �������-����������, �� �� �����������)

gcos

��� �������, �������� ������ ��� ������������, �� ������� ����� ������� ������� � ������ ����������

dir

��������� ������� (�������, � ������� �� ����������, ����� ����� ������� cd ��� ����������, � � ������� �������� ����������� ����� ������, ����� ������� ���������� � �����)

shell

��� ��������������� shell, ��� �������, /bin/sh ��� /��/csh (�, ����� ����, ���� /usr/bin/perl, ���� �� ������� ��������)

�������� �������� ����� ������� �������� ���:

fred:*:123:15:Fred Flintstone,,,:/home/fred:/bin/csh barney:*:125:15:Barney Rubble,,,:/home/barney:/bin/csh

������ � Perl ���������� ������������ ��� ����, ����� ����� ���� ����� ��������� ������ ����� ������ (��������, � ������� ������� split), �� �������� � ����������� ����������. ��� �� ����� � ���������� UNIX ��� �� ���� ����� ����������� ��������: getpwent(3), getpwuid(3), gelpwnam(3) � �.�. ��� ��������� �������� � Perl ��� ���� �� �������, � �������� ����������� � ������������� ����������.

��������, ��������� getpwnam � Perl ���������� �������� getpwnam. �� ������������ �������� � ���������������� ��� (��������, fred ��� barney), � ������������ �������� � ������ ����� /etc/passwd, �������-�������� � ������ �� ���������� ����������:

($name, $passwd, $uid, $gid, $quota, $cominent, $gcos, $dir, $shell)

�������� ��������: ����� ��������� ������ ��������, ��� � ����� �������. ������ � UNIX-��������, �� ������� ���� � ���, ������� �� ������, ���� $quota ������ �����, � ���� $comment � $gcos ����� ��� �������� ������������ ���������� � ������������ (���� GCOS). ���, ��� ������� ����� �� ��������

("fred", "*", 123, 15, "", "Fred Flintstone,,,", "Fred Flintstone,,,", "/home/gred"," /bin/csh")

����������� ������ �� ��������� �������:

getpwuid(123) getpwnam("fred")

 

�������, ��� � �������� ��������� ������� getpwuid ��������� ����-��������� ������������, a getpwnam � ��������������� ���.

��� ������� � ��������� ��������� ������� getpwnam � getpwuid ����� ����� ������������ �������� � ������, ������� �� ��������� � �� �������. ��������:

$idnum = getpwuid("daemon");

$login �= getpwnam (25);

��������, ��� ��������� �������� ��� ���������� �� �����������, ��-������� ��������� �� ��� �������� ��� ��������, ���������� ��� ��������. ���� ������ � �������� ����� ������, ��������� ��� ����� ���� ������, �������� �������� ��� ����� ������ ��������� �������:

($fred home) = (getpwnam ("fred"))[7]; # ��������� ������� �����

��� ����������� ���� ���� �������? ��� ����� ����� ����� �� ���������, � �������, ���:

for($id = 0; $id <= 10_000; $id++) f @stuff = getpwuid $id;

} ### �� �������������!

���, ������, �������� ����. ������� ���������� �������� ���� �� ���� ��� �� ��������, ��� ��� ��� � ������ ������� ����������.

������� getpwuid � getpwnam ����� ������� ��������� ���������-���� �������; ��� ��������� ���������� ������� �� ��� �����, ������� ��� ������ � ��� ������ ���� ����. ������ ����� ������� � ����� ������� � ����������������, �.�. ����������� ��������� ��� �������.

����������� ����������������� ������� � ����� ������� �������� ������� setpwent, getpwent � endpwent. � ������������ ��� ��� ������� ��������� ���������������� ������ �� ���� ������� ����� �������. ������� setpwent �������������� ��������. ����� ������������� ���-��� ����� getpwent ���������� ��������� ������ ����� �������. ���� ������ ��� ��������� ������ ���, getpwent ���������� ������ ������. �������, ����� endpwent ����������� �������, ������������ ���������� ���������; ��� �������� ������������� � ��� ������ �� ���������.

����������� �������� ����� ��������� �� ������ �������� ��� �����-��, ������� ����� ���:

setpwent (); # ���������������� �������� while (@list " getpwent ()) ( # ������� ��������� �������

($login,$home) = @list[0,7]; # �������� ��������������� ��� # � ��������� �������

print "Home directory for $login is $home\n"; # �������� ��� } endpwent(); # ��� �������

 

��� ��������� �������� ����� ��������� ��������� ���� �������������, ������������� � ����� �������. � ���� �� ������ ���������� ��������� �������� � ���������� �������? � ���������� ����� �� ������� ������� sort, ������� ������������� ��:

setpwentf); # ���������������� �������� while (@list = getpwentO) ( # ������� ��������� �������

($login,$home) = @list[0,7]; # �������� ��������������� ��� # � ��������� �������

$home($login} = $home; # ��������� �� )

endpwent(); # ��� ������� Skeys = sort ( $home($a( cmp $home($b) } keys %home;

foreach $login (Skeys) ( # ������ �� ����������������� ������

print "home of $login is $home($login)\n";

}

���� ��������� ����� ������� �������� ������������ ������ ������-����� ����������������� ��������� ����� �������: �� ������ ��������� ��������������� ��������� ������ � ���������� ������, ���������� �� ��Ϻ�� ����������. ������ ����� ������� � ��� ��� ��������� ����� ����� ������� � ��������� ����, � ������� ���� � ��������������� ���, � �������� � ��������� �������, ��������������� ����� ���������������� �����. ������ sort �������� ����� ���� � ��������� �� � ������������ �� ��������� ���������. ����������� ���� � ��� ������ �� �������������-��� ������ � ����������� ����� ���� ��������.

� ����� ������ ��� ��������� ���������� ���������� �������� ����-��������� ������������ ��������� ������������� ������� (getpwuid � getpwnam). ���� �������� ����� ��� ��������� �������� ���� ��������, ����� ��������� ������ � ���������������� �������� (� ������� ����-��� setpwent, getpwent � endpwent) � ��������� ���������� ��������, ������� �� ������ ������, � ���*.

������ � ����� /etc/group �������������� ����������� �������. �����-����������� ������ �������������� �������� ������� setgrent, getgrent � endgrent. ����� getgrent ���������� �������� � ��������� �������:

<$name, $passwd, $gid, $members)

��� ������ �������� �������� ������������� ������� ����� ����� /etc/group, ������� �� ��������� ����������� ����������� � ���������, ����������� �� man-���������, ����������� � ������� ����� �����. ��������������� ������� ������������� ������� � getgrgid (�� ����-���������� ������) � getgrnam (�� ����� ������).

* ���� � ��� ���� � ������� NIS-������, �� �� ������������ ������������������ ����� ������ ������������� ����� ������� ����� �� ������������.

 

�������� � ���������� �������� ������

������ � ������� � ������� ������ ������������ � ��������� ����. ���������� � ������ ��������� ����� ������ ����� ����������� ������������ �����. ��������, IP-����� ���������� �������������� ����������� ����������� ��� ��������������� �����. ���� ��� ����� ������������ � ��������� ���� (��� ������ ��������� ����� �����, ����������� �������), ����� �������������� � ������ ����� �������, ���� ��� ������ � ���������� ����� ���������������� �� ��������� �� ����� ������������.

�� ���� ������� ���������� �� Perl ������� ���������, ��������� ��� ������������ IP-�����, ���������� ��������������� ������, ������ ������� ������� �������������� ���� ���� � ������. ���� ��������������� � ������������� ����� �������� ������ � �������� ������� ������, �����-��� � ������� ������� chr � ord (����� �� ��������������), � Perl ������������ ����� ����������� �������, ������� � ������ ������� ���-������ � � ����� ������� ����������.

������� pack �� �������� ������ ������� ������ �� ������� sprintf. ��� �������� ������, �������� ������, � ������ �������� � ����������� �������� � ���� ������. ������ � pack ������, �������� ������, ������������� ��� �������� �������� ��������� ������. �����-���, ��� ��� ����� ����� ������ ��������� ����� ����� � ��������� �� � ���� ������������������ ������ ��� ����� � ������:

5buf = packf'CCCC", 140, 186, 65, 25);

����� ������ ������� pack � ������ ����� �. ������ � ������������� ���������� ��������, ������� �� ������������ ������ ������ (������� ����, ��� ������ ������������ % � ������� sprintf). ������ � (�������� man-��������� Perl, �������� �����������, ����� Programming Perl, HTML-������ � ���� ����������� Perl: The Motion Picture) ���������� ���� ����, ����������� �� ����������� �������� ��� ����� (��������� ������). ������-��������� � ���������� $buf ������������ ����� ����������������� ������, � ������� ������ ������ ����� ����� ������. ��� ����� ����� �������� 140, 186, 65 � 25 ��������������.

����������� ������� ������ 1 ���������� ������� �������� �� ������. �� ������ ������� ��� ��������������� �����, ���� ���� ������ ������� �� ���������� ������. �� ��������������� "�������" ������ ��������

$buf = packC'l",0�41424344) ;

���������� ����������������� ������, ��������� �� �������� abcd ��� dcba -- � ����������� �� ����, ����� ������� �������� ������ ������������ �� ������ ������: "������� � �������" ��� "������� � �������" (���� ���-�� ���������� ����, ���� ��� ������ "�� �������" �� ASCII). ��� �³�������� ���, ��� �� ����������� ���� �������� � ������ ������� (��� ������������� �������� ������ ��������� ������ �����), � ��� ���� �������� ��� ��� ������� �� ������, �������������� ���� ASCII ������ ������� ���� ��������. ����������� �������,

$buf = pack("ll", 0�41424344, 0�45464748);

������� �������������� ������, ��������� �� ���� abcdefgh ��� dcbahgfe, �����-���� � ����������� �� ����, ����� ������� �������� ������ ������������ � ������ ������ � "������� � �������" ��� "������� � �������".

������ �������� ��������� ��������, ������������ ��� ��������, �������� � ���������� ������������ (perlfunc(l) ��� Programming Perl). �� �������� ��������� �� ��� ��� �������, �� ���, �������, ������ �� �����.

��������, ��� ���� �������������� ������ abcdefgh � �������, ��� ��� �������� �������������� ���������� � ������ (���� ������ � ���� ����) ���� ������� (���������������) �������� �� ������. ��� �� ������������-����? ����� ��������������� ��������, �������� ������� pack,� ����-���� unpack. ��� ����� ������ ���������� �������� (��� �������, ����-������ ���, ������� �� ��������� � ������� pack) � ������ ������ � ���������� ������ ��������, ������� �������� � ��������������� ������� ������. �������, ��������, ��������� ����� ������:

($vall,$val2) = unpack("ll","ABCDEFGH");

��� ���� ��� � ���������� $vall ����� ����� 0�41424344, � ����� ����, � 0�44434241 (� ����������� �� ������� �������� ������). �� ���� ����, �� ������������ ��������� �� ����� ����������, �� ����� ������ �������� � � �������� "������� � �������" ��� "������� � �������".

���������� ������� � ������, �������� ������, ������������ � ��-���������� ���� ��� ���������������. ����� � ���� ������, ��� �������, ������ ���������� ���������� ������������ ��������������� ���������� ���. ��������, ���� ����� �������� ��� �4 ��� �2�2, ����� �� ����� �� ���������. (������ � ��������� ������������� �����, ��������� ����� �������, ��������� ������, �������� ������ ������������, ������� �� �������� ������� ���������� ������.)

����� ������� ������� ����� ������ ����� ���������, ������� ������ ��������� ���������� ������� ������� �� ��� ���, ���� �� ���������� ��������� ����� ������ �������� ��� ���� �� ������� ��������� ����� ������, ���������� �������� ������������� (� ����������� �� ����, ��� ����������� � �������� ��� ����������). ��� ��� ���� ������ �������� ������� �������� ��� ����� � ���� ������:

$bu£ � pack("C*", 140, 186, 65, 25);

����� ��������� ������ �������� ��������� �������������� ����� ������������� �������. ���� �� ��� ����������� ��� �������� ����� � "����������� ��������� ���������� �������� ��� �����", �� ����� ���� �� �������� �������� ���:

$buf = pack("s2 C*", 3141, 5926, 5, 3, 5, 8, 9, 7, 9, 3, 2);

 

����� �� �������� ������ ��� �������� ��� �������� (� ����������, ��������, ������ ��� ������ ��������), � ��������� ������ � ��� ������� ��� ����� (� ����������, ����� ���������, ������ ��������).

������� unpack co ���������� � �������� ������������ ����� �����-������ ������ ���������, ����� ������� ������� �� ����������. ��������, ��� ���������� � �������������� ������� �* ��������� ���� ������� ������ (�����) ��� ������� ������� ������. ���, ��������

@values = unpack("�*", "hello, world!\n");

��������� ������������ ������ �� 14 ���������, �� ������ ��� ������� ������� ������.

��������� ���������� � ����

Perl ������������ ������� ���������������� ����������, ������� ����-�� ������� ���, ��� ����� ��������� ��� ������� ���������� �� �. �� ���� ����, ����������� ������� Perl, �������������� ������ � ����, ����� � �� �� �����, ��� �� �-�������, � ������� ���������. � ���� ����� �� �� ����� �������� ������ ���������� �� �������� ����������������, ������� ������ ���������� �������� �������� ����������.

���� �� ����������, ������� ��� ���������� ����� ����������,� ��� IP-�����, ��������������� �������� ����� (��� ��������). � � �� �����-������� ������� ��� � ������� ����� � ������� ��������� gethostbyname(3). �����, ��������� ���������� �����, �� �������������� ����� ����� ����� ���������� � ������ ����������, ������� �������� ���-�� � ������ �����.

� Perl �������, ������������� ����-��� � �����, ����� �� �� ���, ��� � �-���������, � ������� ���������. �������� ��� ���:

($name, $aliases, $addrtype, $length, @addrs) = gethostbyname($name);

# �������� ����� ������� gethostbyname

�������� ���� ������� � ��� �����, ��������, slate.bedrock.com, � ������������ �������� � ������ �� ������� � ����� ���������� (� ����-������� �� ����, ������� ������� ������� � ������ ������). ���� ��� ����� ���������������, ������� ���������� ������ ������.

����� gethostbyname ���������� � ��������� ���������, ������������ ������ ������ �����.

���� gethostbyname ����������� �������, �� ���������� $name � �������� �������� ������������� ������������ ���, �������, ���� ������� ��� � ���������, ���������� �� �������� �����. �������� ���������� $aliases � ��� ������ ����������� ��������� ����, ��� �������� ������ ���� �������� � ����. ���������� $addrtype �������� ������� ����������� ������� ������������� ������. ��� ����� slate. bedrock. corn �� ����� ������������, ��� ��� �������� ��������� �� IP-�����, ������ �������������� ��� ������ ����� �� ��������� �� 1 �� 256, ����������� �������. ���������� $length �������� ���������� �������. ��� ������ ����������, ��� ��� � ����� ������ ����� ���������� �� ������ ������� @addrs.

�������� �������� ����� ������������� �������� � ������ @addrs. ������ ������� ������� ������� � ��� ��������� IP-�����, �����������-��� �� ���������� ������� � �������������� � Perl ��� ����������������� ������*. ��� ����������������� ������ ������������ � �����, �������� ��� ������ ������� Perl-�������. ������ �����������, ��� ��� ��������� ������� ��������� � ����, ������� ��� ������������. � ������ ������ ��� ����� � ������� ������� unpack � ��� ���������� �������� �������-������ ������������ �������� � ������������� ������. ��� ���, ������� ������������ ����� ������ �� ��-������� ����� slate.bedrock.com:

($addr) = (gethostbyname("slate.bedrock.com"))[4];

print "Slate's address is ",

join(".",unpack ("C4", $addr)), "\n";

������� unpack �������� ��������������� ������ � ���������� ������ �����. �����������, ��� ����� ������ � ��� �������, ������� ����� ������� join ��� ����, ����� ��� �������� ����� ������ ����� ����� ����� � ����������� ����� ������� ��� ��� � ������������� �����. ���������� � ������� ����������-�������� ��������� � ���������� �.

����������

����� ��. � ���������� �.

1. �������� ���������, ������� ������� ������� ������������ ��������-������� ������������� � �������� ���� �� ������� ����� �������, � ����� � ������� ���� ������� ������� ������ �������� ����, ������-������� ������ ������, ���������� � ����� �����. (�������� �� ��� ������ ��� �������������, � ������� � ������ ����� ������� ����� ������ �� ���������, �� � ������ ����� ����� ������ ���������� ���� ������ ���? ���� �� ��������, ��� ��� �������?)




|     �����     |     ������     |


| ���������� | ����������� | �������� | ������
| ����� 1 | ����� 2 | ����� 3 | ����� 4 | ����� 5 | ����� 6 | ����� 7 | ����� 8 | ����� 9 | ����� 10
| ����� 11 | ����� 12 | ����� 13 | ����� 14 | ����� 15 | ����� 16 | ����� 17 | ����� 18 | ����� 19
| ���������� � | ���������� � | ���������� � | ���������� � |