首页 > 解决方案 > 如何创建while循环?

问题描述

我有这个任务,我们希望将一个子进程循环到一个阅读器中,直到它作为 UNDEF 返回。我对编程还是很陌生,所以我很难理解 fork 和 WRITER,READER 函数是如何工作的,所以这让这项任务变得更加困难。我不太确定如何实现这个循环?

这正是所要求的:

让父母进入一个循环,询问用户要发送的消息,直到用户在没有消息的情况下按下回车键($msg eq “\n”)。让孩子进入循环读取管道并打印结果,直到读取管道返回 UNDEF,就像到达文件末尾一样。循环会像这样开始: while ($msg= ) {...}

第一个循环很简单,涉及子进程的第二个循环让我感到困惑。我完全不知道如何完成这个。任何帮助将不胜感激!

这是代码:

 use strict;

    pipe(READER, WRITER);
    autoflush WRITER 1;

    print "\n";

my $pid = fork();

if ($pid){
    &userInput($pid);
}else{ 
    &userOutput();
}
sub userInput{
    close READER;

    my $child = $_[0];
    print "Parent Process $$ Created Child Process $child\n";
    my $user_input = "...";
    while ($user_input ne "\n"){
    print "Enter your name: ";
     $user_input = <STDIN>;

    #If user input is't "\n" do:
    print "Parent PID $$ received: $user_input\n";
    print WRITER $user_input;
    # and then recursively call myself
    waitpid($child, 0);
    print "Child Process $child has finished\n";
}
}

sub userOutput{
    close WRITER;
    my $child = $$;
    my $result = <READER>;
    print "Entering Child Process with id $child\n";
    print "RECEIVED $result FROM PIPELINE\n";
}

标签: perl

解决方案


while像在UserInput. 两者都从输入中读取,并且您使用相同的想法来完成这两项任务:

while( <READER> ) {
...
}

<READER>当没有更多内容可读取时(即另一端关闭连接),行输入运算符 ( ) 返回 undef。这会while自动停止,因为undef它是一个错误值。

这和问题告诉你要做的事情是一样的。现在填写属于循环的语句,你就在那里。


推荐阅读