[bcn-pm] Pregunta sobre open2

Alex Muntada alexm at ac.upc.es
Fri Apr 23 05:06:32 CDT 2004


-----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-----



More information about the Barcelona-pm mailing list