-title: Sequence Diagram Perl (または Ruby/Python/Java ) による shell に沿って、shell のコマンドの組み合わせをfork/exec 実現する Perl のscript を作成せよ。 例えば、 ls ; ls .. は以下のようになる。 #!/usr/bin/perl $|=0; if (fork) { # parent print "Parent $$\n"; # 子供が終わるのを待つ wait; print "Child end\n"; } else { # child print "Child $$\n"; my @command = split; # exec @command; exec "/bin/ls"; print "Child end\n"; } if (fork) { # parent print "Parent $$\n"; # 子供が終わるのを待つ wait; print "Child end\n"; } else { # child print "Child $$\n"; my @command = split; # exec @command; exec "/bin/ls .."; print "Child end 1234\n"; } これを、 ls ; ls .. ; ls ../.. ls ; ( ls & ls ../.. ) ls ; ( ls | wc ) などでやってみる。 pipe は、 pipe READHANDLE,WRITEHANDLE を closeと dup を使う。 (Perlでは dup に open を使う perldoc -f open ) これらの実行を、Astah の sequence diagram を使って記述せよ。 system("ls ; ( ls | wc )"); は内部で /bin/sh を読み出してしまうので、sh のコマンド実行シーケンスを理解する課題として無意味になってしまう。 exec("ls ; ( ls | wc )"); でも同じ。perldoc -f exec を参照。