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

����� 14

    � ���� �����:


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

������������� ������� system u ����

����� �� �� ��������� ������ shell ������� ���������� �����-���� �������, �� ������ ������� ����� �������. ���� ����� ������� ���������� ����������� ��������� shell, ����������� ����������, �� � ����������� � ���������.

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

����� ������� ������ ������� ������ �������� � ������������ ��� ����� ������� system. � ���������� ����� ��� ������� �������� � ���������� ����� shell /bin/sh ���� ������, ������� ����� ����������� ��� �������. �� ���������� ������� ������� system ���������� ��� ���������� ������ ������� (���� ��� ���� ��������� � ���, ��� �������, 0). ��� ������ ����, ��� Perl-��������� ��������� ������� date c ������� shell*:

system("date");

����� �� �� ��������� ������������ ��������, �� ��������� ����� ���������� ������ � date ���� �� ��������.

���� ���� ��������� ���� �������? ������ ��������� �������� ������, ���� ��� ����� �������? ������� �������, � ������ �� ��� �������� ������, ��� ���������� ��������� ������� �������� ���������.

* � ������ ������ shell ���������� �� ������������, ��������� ��dz ��� ��������� �������� shell, ���� ��������� ������ ���������� ������, ��� � ������ ������.

��� ����������� ����� ��� ������� system (����������� ����, ����������� ����� � ����������� ����� ������) ����������� �� Perl-��������. ����� �������, ��������� ���������� ������� dale � ����������� ���� ������� ������������ ���� ��, ���� ��������� ��������� ���������� ������� print stdout � ����ź �����, �� ������� ���������� �� ������������. ��������� �� ���������� shell, �� ������ �������������� ����������� �����, ��������� �������� ��� /��/sh ���������� �������������. ��������, ����� ��������� ���������� ������ ������� date � ���� right_now, ����� ������� ���-�� ����� �����:

system("date >right_now") && die "cannot create right_now";

�� ���� ��� �� �� ������ �������� ��������� ������� date � ����, �������� ������������� � shell, �� � ��������� ������ ��������. ���� ������ �������� � �������� "������" (�� ����), ��� ������, ��� � �������� shell ���-�� ���������, � ������� die �������� ���� ������. ������ ������� ������� ������� �������� ���������� �������� � Perl: ��������� ������-������ �������� �������� system, ��� �������, ��������� �� �����-�� ������.

���������� ������� system ����� ���� ���, ��� �������� ��� �������� � /��/sh, ������� ����� �������� ����� ��������� ������, �������� �� ������� � ������� ��� ��������� ����� ������. ��������, ����� ������� ������ ������ &, �����������, �� ��������� �� ���� �� ����������, �.�. � ������ ������ ��� ���������� ���������� ����, ��� ���� �� �� ����� � shell ������, ������� ������������� �������� &.

��� ������ ������� ������ datewho � shell � ��������� ����������� � ����, �������� Perl-����������. ��� ��� ����������� � ������� ������, ����� ��� ����������� ���������� Perl-�������� �� ����� ���� ����� ���������� ������� ��������.

$where = "who_out.".++$�; t �������� ����� ��� ����� system "(date; who) >$where &";

� ���� ������ ������� system ���������� ��� ������ shell � ���������� ����� �������, ������� �� ��� ������� ������� �������, �� �� ��������, ���� �� ������� ��������� ������� datewho. � ���� ����������� � ������� ������� ������ ������������ ������������ ����������, ������� ���������� $ where ���������� ����� ��������� (��� ������ Perl, � �� shell). ���� �� �� ������ ���������� � ���������� shell � ������ $where, ��� ����� ���� �� ��������� ����� ������ ������� �������� ����� ��� ������������ ������ � ��������� ��������.

������ ����������� ������������ ������, ����������� ������� ��-������� �� ������������� �������� ����� ������ �����. ��� ������� ��������, �������� �������� umask, ������� ������� �, �������, ������������� ������������.

����� ����, ����������� ������� ��������� ��� ���������� �����. ��� ���������� ������ ���������� �������� csh setenv ��� �� ��������������� ������������� � ������ �� export shell (/bin/sh). ���������� ����� ������-������ ������� ���������, ������� ��� shell, ��� ��������� ������� ������ ���� ������ � ���������� ���.

� Perl ������������� ����������� �������� � ��������� ������� ����-������ ����� ����������� ������������ ����, ������� ���������� %env. ������ ���� ����� ���� ������������� ����� ���������� �����, � �������-�������� �������� � �������� ����������. ���������� ������� ���� �������� ��������� �����, ���������� Perl ������������ shell; ��������� ���� �������� ��������� �����, ������� ���������� Perl � ����������� �� ��������, �� �� �����, ������������ ������������� ����������.

��� ������� ���������, ������� ��������, ��� printenv:

foreach $key (sort keys %ENV) ( print "$key = $ENV($key)\n";

> . ,

�������� ��������: ���� ��������� ����� � ��� �� ������ �������� ������������, � ������ ��������� ������, � ������� �������� ������� print ������ ��������� ���� TERM=xterm ��� U3ER=merlyn.

��� �������� ���������, � ������� �������� �������� ���������� path ���������� ����� �������, ����� ����� ������� grep, ���������� �������� system, ������������ ������ � "�������" ������:

$oldPATH = $ENV{ "PATH"); # ��������� ���������� ���� $ENV("PATH") = "/bin:/usr/bin:/usr/ucb"; # ������ ��������� ���� systemC'grep fred bedrock >output") ; # ��������� ������� $ENV{"PATH"} = $oldPATH; # ������������ ���������� ����

��� ����� ������ �������� ��������! ������� ������� ����� ������ ���������� �������ź �������� ��� ����� �������� ����.

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

{

local $ENV{"PATH"> " "/bin:/usr/bin:/usr/ucb"; ! systemC'grep fred bedrock >output");

>

������� system ����� ��������� �� ���� ��������, � ������ �������-���. � ���� ������ Perl �� �������� ������ ���������� � shell, � ������������� ������ �������� ��� ���������� ���������� ������� (��� ������������� ������������ �� ����� �������� ���������� path), � ��������� �������-�� � ��� ��������� ������� ��� ������� ��� shell �������������. ������� �������, ��� �� ����� ��������� � ������� ���������� ������� � �����-������� �� ����������, ������� �������� ������� ������, ������ ��� ��� ��� � ������ �������, ������������ � ���������. ����� �������, ������-��� ��� ������� ������������:

system "grep 'fred flintstone' buffaloes"; # � �������������� shell system "grep","fred flintstone","buffaloes"; # ��� ������������� shell

 

���������� � ������� system ������, � �� ����� ������, �������� ����� ���� ������� shell, ������� ���������� ��� ��� ����� �����������. (���� ����� ������� system c ����� ���������� ���������� ������, Perl ��� ������������ ���, ��������� ������ ����� shell � ��������� � �������-�������� ��������� ���������������, ��� ���� �� �� ������������ ����� ������� � ����������� �����������.)

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

Ocfiles = ("fred.c","barney.c"); # ��� ������������� Soptions = ("-DHARD","-DGRANITE"); # ����� system "cc -o slate Soptions Bcfiles"; # c shell system "cc","-o","slate",goptions,Scfiles"; # ��� shell

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

��� ���� ������ ������� �������� � ��������� ��������� ������ ��� /��/sh � �������� �������. ��� � � shell, ���� �������� ��������� ������� � ������� �� ����������, ������� ������ �� ������������ ������ �� ���� �� �����������:

$now = "the time is now".'date'; # �������� ����� � ����

�������� ���������� $now ������ ������������ ����� ����� the time is now � ��������� ���������� ������� date(l) (������� �������� ������ ����� ������):

the time is now Fri Aug 13 23:59:59 PDT 1996

���� ������ � �������� ������� ������� ������������ �� � ���������, � � ��������� ���������, �� ������������ ������ ��������� ��������, ������ �� ������� ������������ ����� ������ (�������������� �������� ����� ������*) �� ���������� ���������� �������. � ������� � �������� date � ��� ��� �� ����� ���� �������, ������ ��� ��� ������ ����� ���� ������ ������. ��������� ������ ������� who �������� ���:

merlyn tty42 Dec 7 19:41 fred ttylA Aug 31 07:02 barney ttylF Sep 1 09:22

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

foreach $_ ('who') ( # ���� ��� ��� ������ ������ ������ �� who <$who,$where,$when) = /(\S+)\s+(\S+)\s+(.*)/;

print "$who on $where at $when\n";

}

* ��� ��������, ������� � ��� ������� � ���������� $/.

 

��� ������ ���������� ����� ����� ������������ ���� ������ �����-��� ������ ������� who, ������ ��� ������ � �������� ������� ������� ���������������� � ��������� ���������.

����������� ���� � ����������� ����� ������ �������, ������ � �������� �������, ����������� �� Perl-��������*. ��� ������, ��� ������ ����������� ����� ����� ������ �� ������ �������� ��� �������� ������, ����������� � �������� �������. ���� �� ���������������� �������� � ����������� ������������ ������ ������ �� ����������� �������, ����� ������� � �������� �������� "���������" �� ���. ��� ����� ������������ ����������� shell 2>&1:

die "rm spoke!" if 'rm fred 2>&1';

����� Perl-������� �����������, ���� rm �������� �����-������ ������-��� � ���� �� ����������� �����, ���� �� ����������� ����� ������, ������ ��� ��������� ������ �� ����� ������ ������� (������ ������ ����-����������� �� �������� "����").

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

��������� ������ ������� �������� � �������� ��������, ������� �����-��� ��� ���������� ����� (���������� ������������ ������������ �����(3), ���� �� � ��� �������). �� ����� ������� ��� �������� ���������� �����, ������� ���� �������� ��������� ������ ��������, ���� ������ � ���� ������� ������**. ���� �������� ������ �������� ����������� ����� ��� �������� who(l). ��������� ���� ������� ������ ���������, ������� �� ����� ���������, �� ������� ���������� �����, �������� ��� ������:

open(WHOPROC, "who 1"); # ������� who ��� ������

�������� �������� �� ������������ ����� ������ �� who. ��� ����� ����������� Perl � ���, ��� ������ �������� open ��������� �� � ����� �����, � � �������, ������� ���������� ���������. ��������� ����� ����� ������ �� �������, ������ ���������� ����� ����������� ��� ������. ��� ��������, ��� �������������� ����� ������ �� ������������ ������ ������� who. (����������� ���� � ����������� ����� ������ ���������� ������-�������� ��������� � Perl-���������.) ��� ��������� ����� ��������� ���������� whoproc � ��� ������ ���������� �����, ������� ������ ���

* �� ����� ���� ��� �� ��� ������. ��. ��������������� ����� � ������� 8 �������� ����� ���������� �������� �� Perl ("��� ����������� stderr �� ������� �������?"). ���� � ��� Perl ������ 5.004, ���� ������� ���������������� ��� ������� man-�������� � � ������ ������ per/faq8( 1).

** Ho �� ������������. ������� ��������������� ����� ��������� � ����� 6 ����� Programming Perl � �� man-�������� ���1���(1).

 

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

@whosaid = <WHOPROC>;

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

open(LPR,"|Ipr -Psiatewriter") ;

print LPR Srockreport;

close(LPR) ;

� ���� ������ ����� �������� lpr �� ���������� � ���� ������ � ��������� ������ ����. ��������� �������� � ������������ ����� ��������� ��������� ������� ����������� � Perl-����������. ������� ��� ����������� ����� ������� close ���������� Perl-��������� ������� ���������� ��������. ���� ���������� �� ����� ������, ������� ����� ������������ ���� ����� ���������� Perl-���������.

�������� �������� ��� ������ ������������, ��� ����������� ���� ������� ����� ������� �� ����������� �����. ����������� ����� � ����������� ����� ������ ������������ ���� ��������� ��������� � Perl. ��� � ������, �� ������ ������������ ������������� �����-������ � ����� /bin/sh. ��� ��� � ����� ��������� ������� ����� ����������� ��������� �� ������� ������� Ipr.

open(LPR,"|Ipr -Psiatewriter >/dev/null 2>&1");

� ������� �������� >/dev/null �������������� ������������ ������������ ������ ����� ������������� ��� �� ������� ����������. �������� 2>&1 ������������ �������� ������������ ������ ������ ����, ���� ������������ ����������� �����, ������� ��������� �� ������� ����� �������������.

����� ���� ���������� ��� ��� ��������� ��������� � � ���������� �������� ����� ��� ���� ������������������ �������������, ����� �����:

open (WHO,"who[ ") ;

open (LPR,"|Ipr - Psiatewriter");

while (<WHO>) (

unless (/fred/) { # �� ���������� ��� ���� print LPR $_:

> } close WHO;

close LPR;

�������� �� ����������� who �� ����� ������, ���� �������� ���� ������� � ���������� lpr ��� ������, ������� �� �������� ���������� �������� fred. � ���������� �� ������� ��������� ������ �� ������, ������� �� �������� ����� fred.

 

����� �� ����������� ��������� � ������� open ������ �� ����� ������� �� ���� �����. � ��� ����� ������ ����� ���� �����ʺ�. ��������, ������-��� ������ ��������� ������� ls(l), ������� �������� ���� ���������� �� ������ � ������� tail(l), �������, � ���� �������, �������� ���� ���������� � ���������� ����� who pr:

open(WHOPR, "Is I tail -r I");

������������� ������� fork

��� ���� ������ �������� ������ �������� � ������������ �������� Perl-�������� � ������� UNIX-������� fork. ������� fork ������ �� �� �����, ��� � ��������� ����� fork(2): ������� ���� �������� ��������. ���� ���� (�� ���������� ����������� ���������, � �������� � ������������) ���������� ��� �� ����������� ���, �� �� ���������� � ���� �� �� ��������� �����. ����������� ��� ��� �������� �� ������������� �������� ������� fork: ��� ������������ �������� ��� ����� ����, � ��� ������������� � ��������� (��� undef, ���� ���� ��������� ����� �������� ���������). ��������� ��������, ���������� ������������ ���������,� ��� �� ��� ���� ��� ������������� ������������ ��������. �� ������ ��������� ���������-��� �������� � ����������� ��������������:

if (!defined($child_pid = fork()) {

die "cannot fork: $!";

} elsif ($pid) {

4s � � ������������ ������� } else (

# � � ����������� ������� >

����� ����������� ���������� ������������ ���� ����, ��� ����� ������� ��� ��������� �������, �������� ������ ������ �� ����� UNIX-�����: ��� ������� wait, exit � ����.

����� ������� �� ��� � ������� ����. ��� ����� �� �� �����, ��� � ������� system, �� ��� �����������, ��� ������ ������� ������ �������� ��� ���������� shell-������� Perl �������� ������� ������� �� shell. ����� ��������� ���������� ���� Perl-��������� ��������, ��������� ������ ��� ����������� ������������� ���������. ��������,

���� "date";

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

��� ��� ����� ������������� � ��-�������: ������� system ������ �� ���������� ������� fork c �������� ����, ��������:

# ����� �... ������������� system:

system("date");

t ����� 2... ������������� fork/exec:

unless (fork) (

# fork ������ ����, ������� � � ����������� ������� � � ��������:

exec ("date") ; t ����������� ������� ���������� �������� date

}

������������ fork � exec ����� �������� � �� ������ ���������, ������ ��� ������� date � ������������ ������� "������" ������������, �� ���������� ����� ������������ � ��������� ��� ����. ��� ���� ������������� �������� �������� ���������, ���� �� ���������� ����������� �������? ������ ��� � ������ ������� wait; ��� ���� ���������� ������� (�� � ������, ���� ���� ������) ������������ ��������. ������� waitpid ����� ������-����: ��� ���� ���������� �� ������, � ������������� ������������ ��������:

if (!defined($kidpid = fork()) (

# fork ���������� undef, �.�. ������� die "cannot fork: $!";

� elsif ($pid =" 0) {

# fork ���������� �, ������� ������ ����� � ����������� ������� exec("date") ;

# ���� exec ������ �������, ������� � ���������� ��������� die "can't exec date: $!";

} else {

# fork ���������� �� 0 � �� undef,

# ������� ������ ����� � ������������ ������� waitpid($kidpid, 0) ;

}

���� ��� ��� ������� ��� ������� �������, ������� ��������� ������ fork(2)����(2), ������� ��������� � ��� � �����-������ ����������� �� �� UNIX, ������ ��� Perl ������ �������� ������ ���� ������� ����� � ��������� ������ UNIX.

������� exit ������������ ����������� ����� �� �������� Perl-���-�����. ��� ������������ ��� ���������� Perl-��������� ���-������ ����-������ ��� � ������ � �������� fork � ��� ���������� Perl-���� � �������� � ����������� �������. ��� ������ �������� ���������� ������ �� ��������///?�? � ������� ������ � ������� ������������ Perl-��������:

unless (defined ($pid = fork)) ( die "cannot fork: $!";

}

unless ($pid) (

unlink </tmp/badrock.*>; # ������� ��� ����� exit; # ����������� ������� ��������������� �����

)

# ������������ ������� ������������ �����

waitpid($pid, 0); # ����� ����������� ������������ �������� ����� ��� ������

��� ������������� ������� exit ����������� ������� ��������� �� ��������� Perl-��� (�� ������ "# ������������ ������� ������������ �����") � � ��� ��� ����� ��� � �� �����.

������� exit ����� ����� �������������� ��������, �������� �������� ����� ������, ������� �������������� ������������ ���������. �� ��������� ����� ������������ � ������� �����, ������������, ��� ��� ������ ���������.

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

��������, �������� ��� ������� ���������, ����������� � ������� 14.1. ������� 14.1. �������� ������� ���������

��������

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

�����������

�����

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

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

System()

�����������

�����������

�����������

��

 

 

�� ���������

�� ���������

�� ���������

 

 

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

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

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

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

��

��������

 

 

��������

 

 

 

 

������

�������� �

�����������

�����������

������ ��

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

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

�� ���������

�� ���������

����� ��-��������

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

 

 

 

 

 

 

close ()

������ ���

 

 

 

 

 

 

 

 

������

 

 

 

 

 

 

 

 

�������

 

 

 

 

 

 

 

 

open()

 

 

 

 

 

 

 

 

������

�����������

�������� �

�����������

������ ��

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

�� ���������

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

�� ���������

����� ��-��������

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

 

 

 

 

 

 

close ()

����� ���

 

 

 

 

 

 

 

 

������

 

 

 

 

 

 

 

 

�������

 

 

 

 

 

 

 

 

open()

 

 

 

 

 

 

 

 

fork,

����������

����������

����������

����������

����,

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

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

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

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

wait,

 

 

 

 

 

 

 

 

waitpid

 

 

 

 

 

 

 

 

 

����� ������� ������ ������� ������� � ������������ ��� ����� ����-��� system. �� ����������� ����, ����� � ����� ������ ��� �� ������ (��� ����������� �� Perl-��������). ������ � �������� �������� ������� ������� � �������� ������ �� ������������ ������ ����� �������� ��� ��������� �������� ��� Perl-���������. ����������� ���� � ����������� ����� ������ �� ����������. ��� ��� ������ ������� ���������� �������� �� ���������� ������� ����.

������� ������ �������� ����������� ������� (�������, ������� ��-������� ���������� ���������� Perl-��������� �� ������ ����������) � ������� ������� ��� ���������� ����� � ��������� ������ ��� ������������ ����� ��� ������������ ������ ���� �������. �������, �������� ��� ���������� ����� ��� ������, ��������� ����������� ���� � ����������� ����� ������ �� Perl-���������; �������, �������� ��� ���������� ����� ��� ������, ��������� �� Perl-��������� ����������� ����� � ����������� ����� ������.

����� ������ ������ ��������� ������� � ��������� ��������� ������� ������� fork, ���� � wait ��� waitpid, ������� ��������� ���������-���� ����� UNIX-������. � ������� ���� ������� �� ������ ��������� �����-���� ������� ��������� ��� ����������, � ����� ��������������� �� ��Ϻ�� ���������� ����������� ����, ����������� ����� � ����������� ����� ������*.

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

���� �� ��������� ����������� �������������� �������������� ����-��� �� �������� � ������ ��������. ������ � ��� ������������� ��������� (����������, ��� "��������� ������ �������"), ������� ���������� � ������� �� ������� �������� ��� �� ����. �������� ������������� ������, ������ �� ��������� �� ������� �� ���������� �����, �������� 15 ��� 31. ���� ������� (�������������) ����� ���������������� �������� � ����-������ � ������� ������������� ��� ������������� ������������ ������-������� (��������, ��� ����� ������ ��� � �������������� ���������, ����������� ��� ���������� �������� � ��������� �������). ������ ������� ������������ ������������� ������������� �� ������ ���������, �� �� �� ����, � ������ �� ���, ������� ����� ���������� �� �������� ��������. �������� ������� ����������� ������ � ��� ������, ���� �� ���Ѻ���� ����������������� ������������� ��� ���� ���������� ������ ������� ����� ��� �� ������������� ������������, ��� � �����������.

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

* ������� ����� ����� � ������ ���� open(STDERR, ">&stdout") , ������������ ��� ������ ��������� ������������ ������. ��. ����� open � ����� 3 ����� Programming Perl ��� �� man-�������� per1func(l).

 

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

��� ��� ���������� ����, ��� �������� � � ������ ������ �����������-�����, �� ������ ���������� �������� ���������� ������������� Perl-��-�����. ����� Perl-������� ������������� ������, ���������� � ����������-��� ���������� ��������� ���� ������������, ����������� �������� ������������� �� ��� ���. ����� ��� ������������ �����������, �������-��� ����������� ���� ��������������, ��� ����� ������ �� ��������� (�� ����������� ��������� ����������� ��������, ����������� ���� ������-�������,� ���� ��� ������ ���-������ ������).

������ ������������-���������� ������� ������ ���� �� ����: �����-���� ���������, �������� "�������", ��� ������������� �����-�� ���� (��������, ���������� ����������), ������� ������ ��������� ����� ���������*.

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

����� �������� ������������ �� man-�������� signal(2), � �����, ��� �������, � ������������ �-����� /usr/include/sys/signal.h. ��� ����� ������ ���������� � ���� sig, �������� sigint, sigquit � sigkill. ����� �������� ������������ my_sigint_catcher () ������������ ������� sigint, �� ������ ���������� ��������������� �������� � ����������� ���� %sig. � ���� ���� � �������� �������� ����� int (��� sigint ��� sig) ������� ������� ��� ������������, ������� ����� ������������� ������ sigint:

$SIG{'INT'} � 'my_sigint_catcher';

�� ��� ����������� ����� ����������� ���� ������������. ��� ������ �������� �����������:

sub my_sigint_catcher (

$saw_sigint = 1; # ���������� ���� }

������ ����������� �������� ������������� ���������� ���������� � ����� �� ���������� ����������. ���������� ��������� ������������ � ��� �������, � ������� ��� ���� ��������. ������ ������� ���������� ���� $saw_sigint, ��������������� ������������ ������������ ��� ����������� ������� sigint, � ����� ������� ��� �������� ���������, ��������:

$saw_sigint = 0; # �������� ���� $SIG{'INT') = 'my_sigint_catcher'; # ���������������� �����������

foreach (@huge_array) (

# ���-������ �������

t ��� ���-������ �������

# � ��� ���-������ if ($saw_sigint) ( # ���������� �����?

t ����� "�������" last;

} } $SIG('INT'} = 'DEFAULT'; # ������������ �������� �� ���������

* ������� ���������� �������� ����� �������, ��� �������������, ��������� �����, �������� ��������; ����������� ���������� ���������� Perl "�� �����", ����� �� ����-���� ������������ � �������� ��������� � �� ������������. ���� ��������� ������-���� ���� ����� "�� �����".

����������� ������������� ������� � ������ ��������� ��������� ������� ���, ��� �������� ����� ����������� � ��������� ������ �������� ���������� � ������������ ��� ���������������� ������ �� �����; ��� ���� ����������� � ����������� "�������". �������� �������� �� ������-��� �������� � ����������� ���� ����: ��������� �������� � �������� default ��������������� �������� ����������� ������� �� ��������� (��������� ������ sigint ���������� ������� ���������� ���������). ��� ���� �������� ����������� �������� ����� ����� � ignore, �.�. "������������ ������" (���� �������� �� ��������� � �� ������������ ������, ���� sigint). ��� ������� ����� ���������� �������� ignore, ���� �� ����� ��������� ������� "�������" � �� �� ������ �������������� ��������� ���������� �������� ���������.

���� �� �������� ������������� ������� sigint � ��������� ������������ ������ �� ���������� ��������� ��������������� ���������� ������� (��-������, [Ctrl+C]). ������� ���� ����� ������������ ������ sigint, ��������� ��� ����� ������� kill. ������ ������� �������� ����� ��� ��� ������� � �������� ��������������� ������ � �������� (������������ ������������-����) �������� ������, ���������� ����� �������. �������������, ��� �������� ������� �� ��������� ���������� ���������� �������������� ���������-��-���������. (�������������� ��������� ������������ ���������� �������-��, �������� �������� fork, � ��� ��������� ��������� ��� ����������� ����� �������� open). �����������, �� ������ ������� ������ 2 (��������� ����� ��� sigint) � �������� 234 � 237. ��� �������� ����� ������:

kill(2,234,237); # ������� SIGINT � 234 � 237 kill ('INT', 234, 237); # �� �� �����

����� �������� ������� ��������� �������� ������� � ����� 6 ����� Programming Perl � �� man-�������� perlipc(l).

����������

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

�������� ���������, ������� �������� ��������� ������� date � �����-���� ������� ���� ������. ���� ���� ������ � ������� ����, �������� get to work, � ��������� ������ �������� go play.

�������� ���������, ������� �������� ��� �������� ����� ������������� �� ����� /etc/passwd, � ����� �������������� ��������� ������� who, ������� ��������������� ��� (������ �������) �������� ������. (�����:

�������� ���, ��� ���� � ��������������� ���, � �������� � �������� ���.) ���������� ��������� ��� ������ � �������������� ������� who ��� � �������� ��������, ��� � ��������� ��� �����. ��� �����?

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

�����������, ������� mkdir ��������� ��������. �������� ������-������, ������� �� ���������� mkdir, � �������� /bin/mkdir c ����-��� ������� system. (��������� � ���, ��� ��� �������� � ����������, � ������ ������� ���� ������.)

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




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


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