[bcn-pm] Pregunta sobre open2

Xavi Planas xavier_planas at yahoo.es
Fri Apr 23 06:35:29 CDT 2004


Alex,
a partir dels teus sugeriments he intentat seguir la
sol·lució dels named pipes, però sense sort. El tema
és que no sóc capaç de processar cap tipus de sortida.

És correcte el meu script? Enfoco malament la teva
sugerència? Alguna altra idea?
El Server Manager no el puc customitzar, miraré amb
carinyo el que hem comentes sobre dimonitzar el
procés, però això hem sol·lucionarà el problema de
processament d'entrada i sortida tenint en compte que
únicament puc executar-lo?

#!/usr/bin/perl -w

use strict;

if ( ! -p "LECT" ) { system ("mknod", "LECT", "p") };
if ( ! -p "ESCR" ) { system ("mknod", "ESCR", "p") };

open (FIFO_LECT, "LECT");
open (FIFO_ESCR, "ESCR");

if ( my $pid=fork() ) {

*STDOUT=*FIFO_ESCR;
*STDIN=*FIFO_LECT;

  exec ("SERVERMANAGER")|| warn "Err en exec: $!";


}else {

print FIFO_LECT  "COMANDA SERVERMANAGER\n";
while ( <FIFO_ESCR> ) { print $_; }
print FIFO_LECT  "COMANDA2 SERVERMANAGER\n";
....
}
}

 --- Alex Muntada <alexm at ac.upc.es> escribió: >
-----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
> 
> * Xavi Planas:  [2004-04-23/10:40:22 +0200]
> 
> > - El server manager és un procés de tipus shell
> > programat amb C y desde el que es gestionen
> > característiques adm d'una aplicació.
> 
> En tens el codi? Tens la possibilitat de
> modificar-lo o
> de reescriure'l en Perl? La idea seria convertir
> aquest
> procés en un daemon que pugui atendre diverses
> peticions
> alhora, un cop carregat a memòria. El mòdul
> Net::Daemon
> és collonut per a fer-ho.
> 
> > - El temps d'espera es produeix únicament a
> l'arrancar
> > el programa (5-10s) tot i que no fa un ús intensiu
> > dels recursos de màquina.
> 
> En aquest cas, la solució del daemon seria ideal.
> 
> > - Sí, el que vull fer és pujar el programa a
> memòria i
> > poder fer crides puntuals per tal de processar la
> seva
> > sortida.
> 
> Suposaré que la interacció amb aquest procés es fa
> amb
> l'stdin i l'stdout. Si és així, tens la possibilitat
> de
> d'utilitzar dues "named pipes" i associar-les a
> l'stdin
> i l'stdout respectivament abans de fer un exec del
> teu
> "Server Manager" (que les heredarà com a canals 0 i
> 1).
> 
> Un cop fet això, ja pots fer consultes i llegir els
> resultats des de les "named pipes" sense que et
> calgui
> modificar el Server Manager.
> 
> Aquesta solució es pot implementar en C o en Perl,
> però
> només en sistemes que disposin de "named pipes":
> 
> % mknod entrada p
> % mknod sortida p
> % cat >setup.c <<EOF
> #include <unistd.h>
> #include <fcntl.h>
> #include <errno.h>
> 
> int
> main(void)
> {
> 	int fd;
> 
> 	close(0);
> 	fd = open("entrada", O_RDONLY);
> 	if (fd == -1) {
> 		perror("entrada");
> 		return 1;
> 	}
> 
> 	close(1);
> 	fd = open("sortida", O_WRONLY);
> 	if (fd == -1) {
> 		perror("entrada");
> 		return 2;
> 	}
> 
> 	execl("servermanager", "servermanager", 0);
> 	return 3;
> }
> EOF
> % cc -o setup setup.c
> % ./setup &
> 
> Aquesta seria la idea general de la solució amb
> "named pipes"
> (tingueu en compte que us la descric de memòria, és
> a dir,
> que no l'he provat i podria tenir alguns errors). La
> part del
> client, la deixo com a exercici...
> 
> use Perl;
> no Patents;
> 
> - --
> Alex Muntada <alexm at ac.upc.es>
> http://people.ac.upc.es/alexm/
> 
> -----BEGIN PGP SIGNATURE-----
> Version: GnuPG v1.0.7 (GNU/Linux)
> 
>
iD8DBQFAiOqfLdxCGS3zaBERAve2AKDaiyLPYkG4Hxjy2qJh1OV3KZ4rMACgxTwS
> IvOWB/Pq9cIyYPSXhB9sPck=
> =0v7h
> -----END PGP SIGNATURE-----
> _______________________________________________
> llista dels Barcelona-pm
> Barcelona-pm at mail.pm.org
> http://mail.pm.org/mailman/listinfo/barcelona-pm
> BCN Perl Mongers: http://barcelona.pm.org 


		
______________________________________________________________________
Correo Yahoo! - 6MB, más protección contra el spam ¡Gratis!
http://correo.yahoo.es



More information about the Barcelona-pm mailing list