📄 processmanagementandcommunication.mht
字号:
color=3D#98fb98>eof</FONT><FONT color=3D#00ffff>(</FONT>$fh<FONT =
color=3D#00ffff>);</FONT>
<FONT color=3D#00ffff>}</FONT>
<FONT color=3D#00ffff>}</FONT>
<FONT color=3D#98fb98>close</FONT><FONT =
color=3D#00ffff>(</FONT>CMD_CUT<FONT color=3D#00ffff>);</FONT>
<FONT color=3D#98fb98>close</FONT><FONT =
color=3D#00ffff>(</FONT>CMD_ERR<FONT color=3D#00ffff>);</FONT>
<FONT color=3D#bebebe>#-----------------------------
</FONT></PRE></FONT></TD></TR></TBODY></TABLE></DIV>
<DIV class=3DSECT2>
<H2 class=3DSECT2><A name=3DAEN878>Communicating Between Related =
Processes</A></H2>
<TABLE width=3D"100%" bgColor=3D#2f4f4f border=3D0>
<TBODY>
<TR>
<TD><PRE class=3DSCREEN><FONT color=3D#f5deb3 size=3D+1><FONT =
color=3D#bebebe>#-----------------------------
</FONT><FONT color=3D#98fb98>pipe</FONT><FONT =
color=3D#00ffff>(</FONT>READER, WRITER<FONT color=3D#00ffff>);</FONT>
<FONT color=3D#ffa500>if</FONT> <FONT color=3D#00ffff>(</FONT><FONT =
color=3D#98fb98>fork</FONT><FONT color=3D#00ffff>)</FONT> <FONT =
color=3D#00ffff>{</FONT>
<FONT color=3D#bebebe># run parent code, either reading or writing, =
not both
</FONT><FONT color=3D#00ffff>}</FONT> <FONT color=3D#ffa500>else</FONT> =
<FONT color=3D#00ffff>{</FONT>
<FONT color=3D#bebebe># run child code, either reading or writing, =
not both
</FONT><FONT color=3D#00ffff>}</FONT>
<FONT color=3D#bebebe>#-----------------------------
</FONT><FONT color=3D#ffa500>if</FONT> <FONT =
color=3D#00ffff>(</FONT>$pid =3D <FONT color=3D#98fb98>open</FONT><FONT =
color=3D#00ffff>(</FONT>CHILD, <FONT color=3D#00cd00>"|-"</FONT><FONT =
color=3D#00ffff>))</FONT> <FONT color=3D#00ffff>{</FONT>
<FONT color=3D#bebebe># run parent code, writing to child
</FONT><FONT color=3D#00ffff>}</FONT> <FONT color=3D#ffa500>else</FONT> =
<FONT color=3D#00ffff>{</FONT>
<FONT color=3D#ffa500>die</FONT> <FONT color=3D#00cd00>"cannot fork: =
$!"</FONT> <FONT color=3D#ffa500>unless</FONT> <FONT =
color=3D#ff7f50>defined</FONT> $pid<FONT color=3D#00ffff>;</FONT>
<FONT color=3D#bebebe># otherwise run child code here, reading from =
parent
</FONT><FONT color=3D#00ffff>}</FONT>
<FONT color=3D#bebebe>#-----------------------------
</FONT><FONT color=3D#ffa500>if</FONT> <FONT =
color=3D#00ffff>(</FONT>$pid =3D <FONT color=3D#98fb98>open</FONT><FONT =
color=3D#00ffff>(</FONT>CHILD, <FONT color=3D#00cd00>"-|"</FONT><FONT =
color=3D#00ffff>))</FONT> <FONT color=3D#00ffff>{</FONT>
<FONT color=3D#bebebe># run parent code, reading from child
</FONT><FONT color=3D#00ffff>}</FONT> <FONT color=3D#ffa500>else</FONT> =
<FONT color=3D#00ffff>{</FONT>
<FONT color=3D#ffa500>die</FONT> <FONT color=3D#00cd00>"cannot fork: =
$!"</FONT> <FONT color=3D#ffa500>unless</FONT> <FONT =
color=3D#ff7f50>defined</FONT> $pid<FONT color=3D#00ffff>;</FONT>
<FONT color=3D#bebebe># otherwise run child code here, writing to =
parent
</FONT><FONT color=3D#00ffff>}</FONT>
<FONT color=3D#bebebe>#-----------------------------
# <FONT size=3D-1><A =
href=3D"http://pleac.sourceforge.net/include/perl/ch16/pipe1">download =
the following standalone program</A></FONT>
#!/usr/bin/perl -w
# pipe1 - use pipe and fork so parent can send to child
</FONT>
<FONT color=3D#ffa500>use</FONT> <FONT =
color=3D#b2dfee>IO::Handle</FONT><FONT color=3D#00ffff>;</FONT>
<FONT color=3D#98fb98>pipe</FONT><FONT color=3D#00ffff>(</FONT>READER, =
WRITER<FONT color=3D#00ffff>);</FONT>
WRITER->autoflush<FONT color=3D#00ffff>(</FONT><FONT =
color=3D#cdcd00>1</FONT><FONT color=3D#00ffff>);</FONT>
<FONT color=3D#ffa500>if</FONT> <FONT color=3D#00ffff>(</FONT>$pid =3D =
<FONT color=3D#98fb98>fork</FONT><FONT color=3D#00ffff>)</FONT> <FONT =
color=3D#00ffff>{</FONT>
<FONT color=3D#98fb98>close</FONT> READER<FONT =
color=3D#00ffff>;</FONT>
<FONT color=3D#ff7f50>print</FONT> WRITER <FONT =
color=3D#00cd00>"Parent Pid $$ is sending this\n"</FONT><FONT =
color=3D#00ffff>;</FONT>
<FONT color=3D#98fb98>close</FONT> WRITER<FONT =
color=3D#00ffff>;</FONT>
<FONT color=3D#98fb98>waitpid</FONT><FONT =
color=3D#00ffff>(</FONT>$pid,<FONT color=3D#cdcd00>0</FONT><FONT =
color=3D#00ffff>);</FONT>
<FONT color=3D#00ffff>}</FONT> <FONT color=3D#ffa500>else</FONT> <FONT =
color=3D#00ffff>{</FONT>
<FONT color=3D#ffa500>die</FONT> <FONT color=3D#00cd00>"cannot fork: =
$!"</FONT> <FONT color=3D#ffa500>unless</FONT> <FONT =
color=3D#ff7f50>defined</FONT> $pid<FONT color=3D#00ffff>;</FONT>
<FONT color=3D#98fb98>close</FONT> WRITER<FONT =
color=3D#00ffff>;</FONT>
<FONT color=3D#ff7f50>chomp</FONT><FONT =
color=3D#00ffff>(</FONT>$line =3D <READER><FONT =
color=3D#00ffff>);</FONT>
<FONT color=3D#ff7f50>print</FONT> <FONT color=3D#00cd00>"Child Pid =
$$ just read this: `$line'\n"</FONT><FONT color=3D#00ffff>;</FONT>
<FONT color=3D#98fb98>close</FONT> READER<FONT =
color=3D#00ffff>;</FONT> <FONT color=3D#bebebe># this will happen =
anyway
</FONT> <FONT color=3D#ffa500>exit</FONT><FONT =
color=3D#00ffff>;</FONT>
<FONT color=3D#00ffff>}</FONT>
<FONT color=3D#bebebe>#-----------------------------
# <FONT size=3D-1><A =
href=3D"http://pleac.sourceforge.net/include/perl/ch16/pipe2">download =
the following standalone program</A></FONT>
#!/usr/bin/perl -w
# pipe2 - use pipe and fork so child can send to parent
</FONT>
<FONT color=3D#ffa500>use</FONT> <FONT =
color=3D#b2dfee>IO::Handle</FONT><FONT color=3D#00ffff>;</FONT>
<FONT color=3D#98fb98>pipe</FONT><FONT color=3D#00ffff>(</FONT>READER, =
WRITER<FONT color=3D#00ffff>);</FONT>
WRITER->autoflush<FONT color=3D#00ffff>(</FONT><FONT =
color=3D#cdcd00>1</FONT><FONT color=3D#00ffff>);</FONT>
<FONT color=3D#ffa500>if</FONT> <FONT color=3D#00ffff>(</FONT>$pid =3D =
<FONT color=3D#98fb98>fork</FONT><FONT color=3D#00ffff>)</FONT> <FONT =
color=3D#00ffff>{</FONT>
<FONT color=3D#98fb98>close</FONT> WRITER<FONT =
color=3D#00ffff>;</FONT>
<FONT color=3D#ff7f50>chomp</FONT><FONT =
color=3D#00ffff>(</FONT>$line =3D <READER><FONT =
color=3D#00ffff>);</FONT>
<FONT color=3D#ff7f50>print</FONT> <FONT color=3D#00cd00>"Parent Pid =
$$ just read this: `$line'\n"</FONT><FONT color=3D#00ffff>;</FONT>
<FONT color=3D#98fb98>close</FONT> READER<FONT =
color=3D#00ffff>;</FONT>
<FONT color=3D#98fb98>waitpid</FONT><FONT =
color=3D#00ffff>(</FONT>$pid,<FONT color=3D#cdcd00>0</FONT><FONT =
color=3D#00ffff>);</FONT>
<FONT color=3D#00ffff>}</FONT> <FONT color=3D#ffa500>else</FONT> <FONT =
color=3D#00ffff>{</FONT>
<FONT color=3D#ffa500>die</FONT> <FONT color=3D#00cd00>"cannot fork: =
$!"</FONT> <FONT color=3D#ffa500>unless</FONT> <FONT =
color=3D#ff7f50>defined</FONT> $pid<FONT color=3D#00ffff>;</FONT>
<FONT color=3D#98fb98>close</FONT> READER<FONT =
color=3D#00ffff>;</FONT>
<FONT color=3D#ff7f50>print</FONT> WRITER <FONT =
color=3D#00cd00>"Child Pid $$ is sending this\n"</FONT><FONT =
color=3D#00ffff>;</FONT>
<FONT color=3D#98fb98>close</FONT> WRITER<FONT =
color=3D#00ffff>;</FONT> <FONT color=3D#bebebe># this will happen =
anyway
</FONT> <FONT color=3D#ffa500>exit</FONT><FONT =
color=3D#00ffff>;</FONT>
<FONT color=3D#00ffff>}</FONT>
<FONT color=3D#bebebe>#-----------------------------
# <FONT size=3D-1><A =
href=3D"http://pleac.sourceforge.net/include/perl/ch16/pipe3">download =
the following standalone program</A></FONT>
#!/usr/bin/perl -w
# pipe3 - use forking open so parent can send to child
</FONT>
<FONT color=3D#ffa500>use</FONT> <FONT =
color=3D#b2dfee>IO::Handle</FONT><FONT color=3D#00ffff>;</FONT>
<FONT color=3D#ffa500>if</FONT> <FONT color=3D#00ffff>(</FONT>$pid =3D =
<FONT color=3D#98fb98>open</FONT><FONT color=3D#00ffff>(</FONT>CHILD, =
<FONT color=3D#00cd00>"|-"</FONT><FONT color=3D#00ffff>))</FONT> <FONT =
color=3D#00ffff>{</FONT>
CHILD->autoflush<FONT color=3D#00ffff>(</FONT><FONT =
color=3D#cdcd00>1</FONT><FONT color=3D#00ffff>);</FONT>
<FONT color=3D#ff7f50>print</FONT> CHILD <FONT =
color=3D#00cd00>"Parent Pid $$ is sending this\n"</FONT><FONT =
color=3D#00ffff>;</FONT>
<FONT color=3D#98fb98>close</FONT><FONT =
color=3D#00ffff>(</FONT>CHILD<FONT color=3D#00ffff>);</FONT>
<FONT color=3D#00ffff>}</FONT> <FONT color=3D#ffa500>else</FONT> <FONT =
color=3D#00ffff>{</FONT>
<FONT color=3D#ffa500>die</FONT> <FONT color=3D#00cd00>"cannot fork: =
$!"</FONT> <FONT color=3D#ffa500>unless</FONT> <FONT =
color=3D#ff7f50>defined</FONT> $pid<FONT color=3D#00ffff>;</FONT>
<FONT color=3D#ff7f50>chomp</FONT><FONT =
color=3D#00ffff>(</FONT>$line =3D <STDIN><FONT =
color=3D#00ffff>);</FONT>
<FONT color=3D#ff7f50>print</FONT> <FONT color=3D#00cd00>"Child Pid =
$$ just read this: `$line'\n"</FONT><FONT color=3D#00ffff>;</FONT>
<FONT color=3D#ffa500>exit</FONT><FONT color=3D#00ffff>;</FONT>
<FONT color=3D#00ffff>}</FONT>
<FONT color=3D#bebebe>#-----------------------------
# <FONT size=3D-1><A =
href=3D"http://pleac.sourceforge.net/include/perl/ch16/pipe4">download =
the following standalone program</A></FONT>
#!/usr/bin/perl -w
# pipe4 - use forking open so child can send to parent
</FONT>
<FONT color=3D#ffa500>use</FONT> <FONT =
color=3D#b2dfee>IO::Handle</FONT><FONT color=3D#00ffff>;</FONT>
<FONT color=3D#ffa500>if</FONT> <FONT color=3D#00ffff>(</FONT>$pid =3D =
<FONT color=3D#98fb98>open</FONT><FONT color=3D#00ffff>(</FONT>CHILD, =
<FONT color=3D#00cd00>"-|"</FONT><FONT color=3D#00ffff>))</FONT> <FONT =
color=3D#00ffff>{</FONT>
<FONT color=3D#ff7f50>chomp</FONT><FONT =
color=3D#00ffff>(</FONT>$line =3D <CHILD><FONT =
color=3D#00ffff>);</FONT>
<FONT color=3D#ff7f50>print</FONT> <FONT color=3D#00cd00>"Parent Pid =
$$ just read this: `$line'\n"</FONT><FONT color=3D#00ffff>;</FONT>
<FONT color=3D#98fb98>close</FONT><FONT =
color=3D#00ffff>(</FONT>CHILD<FONT color=3D#00ffff>);</FONT>
<FONT color=3D#00ffff>}</FONT> <FONT color=3D#ffa500>else</FONT> <FONT =
color=3D#00ffff>{</FONT>
<FONT color=3D#ffa500>die</FONT> <FONT color=3D#00cd00>"cannot fork: =
$!"</FONT> <FONT color=3D#ffa500>unless</FONT> <FONT =
color=3D#ff7f50>defined</FONT> $pid<FONT color=3D#00ffff>;</FONT>
STDOUT->autoflush<FONT color=3D#00ffff>(</FONT><FONT =
color=3D#cdcd00>1</FONT><FONT color=3D#00ffff>);</FONT>
<FONT color=3D#ff7f50>print</FONT> STDOUT <FONT =
color=3D#00cd00>"Child Pid $$ is sending this\n"</FONT><FONT =
color=3D#00ffff>;</FONT>
<FONT color=3D#ffa500>exit</FONT><FONT color=3D#00ffff>;</FONT>
<FONT color=3D#00ffff>}</FONT>
<FONT color=3D#bebebe>#-----------------------------
# <FONT size=3D-1><A =
href=3D"http://pleac.sourceforge.net/include/perl/ch16/pipe5">download =
the following standalone program</A></FONT>
#!/usr/bin/perl -w
# pipe5 - bidirectional communication using two pipe pairs
# designed for the socketpair-challenged
</FONT><FONT color=3D#ffa500>use</FONT> <FONT =
color=3D#b2dfee>IO::Handle</FONT><FONT color=3D#00ffff>;</FONT>
<FONT color=3D#98fb98>pipe</FONT><FONT =
color=3D#00ffff>(</FONT>PARENT_RDR, CHILD_WTR<FONT =
color=3D#00ffff>);</FONT>
<FONT color=3D#98fb98>pipe</FONT><FONT =
color=3D#00ffff>(</FONT>CHILD_RDR, PARENT_WTR<FONT =
color=3D#00ffff>);</FONT>
CHILD_WTR->autoflush<FONT color=3D#00ffff>(</FONT><FONT =
color=3D#cdcd00>1</FONT><FONT color=3D#00ffff>);</FONT>
PARENT_WTR->autoflush<FONT color=3D#00ffff>(</FONT><FONT =
color=3D#cdcd00>1</FONT><FONT color=3D#00ffff>);</FONT>
<FONT color=3D#ffa500>if</FONT> <FONT color=3D#00ffff>(</FONT>$pid =3D =
<FONT color=3D#98fb98>fork</FONT><FONT color=3D#00ffff>)</FONT> <FONT =
color=3D#00ffff>{</FONT>
<FONT color=3D#98fb98>close</FONT> PARENT_RDR<FONT =
color=3D#00ffff>;</FONT> <FONT color=3D#98fb98>close</FONT> =
PARENT_WTR<FONT color=3D#00ffff>;</FONT>
<FONT color=3D#ff7f50>print</FONT> CHILD_WTR <FONT =
color=3D#00cd00>"Parent Pid $$ is sending this\n"</FONT><FONT =
color=3D#00ffff>;</FONT>
<FONT color=3D#ff7f50>chomp</FONT><FONT =
color=3D#00ffff>(</FONT>$line =3D <CHILD_RDR><FONT =
color=3D#00ffff>);</FONT>
<FONT color=3D#ff7f50>print</FONT> <FONT color=3D#00cd00>"Parent Pid =
$$ just read this: `$line'\n"</FONT><FONT color=3D#00ffff>;</FONT>
<FONT color=3D#98fb98>close</FONT> CHILD_RDR<FONT =
color=3D#00ffff>;</FONT> <FONT color=3D#98fb98>close</FONT> =
CHILD_WTR<FONT color=3D#00ffff>;</FONT>
<FONT color=3D#98fb98>waitpid</FONT><FONT =
color=3D#00ffff>(</FONT>$pid,<FONT color=3D#cdcd00>0</FONT><FONT =
color=3D#00ffff>);</FONT>
<FONT color=3D#00ffff>}</FONT> <FONT color=3D#ffa500>else</FONT> <FONT =
color=3D#00ffff>{</FONT>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -