#!/usr/bin/perl -w use strict; use File::Copy; my @DEVS = qw(/dev/fd0 /dev/fd1); while (1) { my %name; foreach (@DEVS) { PROMPT: print "Name of diskette in device $_: "; my $name = ; chomp $name; goto PROMPT if $name !~ /\S/; $name{$_} = $name; } my @pids; foreach (@DEVS) { my $r = fork(); if (not defined $r) { die "cannot fork: $!"; } elsif ($r == 0) { # Child. print STDERR "$_ -> $name{$_}\n"; if (not copy($_, $name{$_})) { unlink $name{$_}; die "cannot copy $_ to $name{$_}: $!"; } exit(0); } else { # Parent. push @pids, $r; } } foreach (@pids) { my $r = waitpid($_, 0); if ($r eq $_) { # Okay. } elsif ($r == -1) { warn "strange, child process $_ seems not to exist"; } elsif ($r == 0) { warn "didn't expect 0 from waitpid() on this system"; } else { warn "strange result from waitpid($_, 0): $r"; } } warn "strange, there were extra child processes" if wait() != -1; }