У меня есть это задание, в котором мы ожидаем, что 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";
}