Práctica: Pipes con Nombre. Apertura Bidireccional

Escriba un módulo que provea una función opennp que retorna tres manejadores:

my ($fromme, $tome, $err) = opennp('metoexternal.p', 'externaltome.p', 'err.p', 'command par1 par2');

La función crea los tres pipes con nombre con los argumentos especificados lanza la aplicación command par1 par2 con su output redirigido a externaltome.p, su input rederigido desde metoexternal.p y su salida de errores a err.p. Los manejadores pueden ser entonces usados para comunicarse con la aplicación externa:

syswrite $fromme, $message;

Para lanzar el proceso de forma concurrente use fork. El seudocódigo sigue este esquema:

if ($pid = fork) { # father 
  die "Can't fork" unless defined $pid;
  ...
}
else {
  # redirect STDOUT, STDIN and STDERR  to named pipes
  exec('command par1 par2 > externaltome.p < metoexternal.p 2> err.p');
}

Lista de requisitos:

Casiano Rodríguez León
Licencia de Creative Commons
Programación Distribuida y Mejora del Rendimiento
por Casiano Rodríguez León is licensed under a Creative Commons Reconocimiento 3.0 Unported License.

Permissions beyond the scope of this license may be available at http://campusvirtual.ull.es/ocw/course/view.php?id=44.
2012-06-19