Как создать пока l oop с <READER>? - PullRequest
1 голос
/ 13 февраля 2020

У меня есть это задание, в котором мы ожидаем, что l oop дочерний процесс в читателе, пока он не вернется как UNDEF. Я все еще очень плохо разбираюсь в программировании, поэтому мне сложно понять, как работают функции fork и WRITER, READER, поэтому это усложнило эту задачу. Я не совсем уверен, как реализовать это l oop?

Вот именно то, что спросили:

Пусть родитель go в al oop спрашивает пользователя для отправки сообщения, пока пользователь не нажмет ввод без сообщения ($ msg eq «\ n»). Пусть ребенок go в al oop читает канал и печатает результат до тех пор, пока чтение канала не вернет UNDEF, точно так же, как до конца файла. L oop будет начинаться примерно так: while ($ msg =) {...}

Первый l oop был достаточно простым, второй l oop с участием ребенка процесс это то, что смущает меня. Я понятия не имею, как это сделать. Любая помощь будет принята с благодарностью!

Вот код:

 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";
}

1 Ответ

2 голосов
/ 13 февраля 2020

Используйте другой while, как вы сделали в UserInput. Оба читают из ввода, и вы используете одни и те же идеи для выполнения sh обеих задач:

while( <READER> ) {
...
}

Оператор ввода строки (<READER>) возвращает undef, когда больше нечего читать (то есть с другой стороны) закрыл соединение). Это автоматически останавливает while, поскольку undef является ложным значением.

Это то же самое, что проблема сказала вам сделать. Теперь заполните заявления, принадлежащие l oop, и вы там.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...