Trabajar con memoria compartida entre procesos php
27 02 2008
Para los que no deseen emplear fifos para la comunicación entre procesos php, la otra solución es compartir un segmento de memoria. Esta tarea se puede realizar con los comandos shmop.
Estas funciones no precisan la instalación de extensiones especificas pero si la compilación de tu php con el parámetro --enable-shmop
Esta opción nos permite tener disponibles los siguientes comandos
- shmop_close — Cierra un segmento de memoria compartida
-shmop_delete — Borra un segmento de memoria compartida
- shmop_open — Crea o abre un segmento de memoria compartida
- shmop_read — Lee un segmento de memoria compartida
- shmop_size — Obtiene el tamaño de un segmento de memoria compartida
- shmop_write — Escribe datos en un segmento de memoria compartida
Se emplean de manera analoga a como lo hariamos con un fichero o con un socket
Primero abrimos el segmento compartido con chmop_open, luego leemos o escribimos (las dos opciones son posibles a diferencia de los fifos en GNU/Linux donde o abrimos el fifo para lectura o para escritura) con shmop_read o shmop_write. Y finalmente cerramos el segmento de memoria compartido con chmop_close.
Este seria un ejemplo sencillo
<?php
//0xff3 - identificador segmento, se debe utilizar en todos los segmentos a compartir
// "c" - Opciones: c para crear, a para acceder, w acceder lectura/escritura y n crear nuevo segmento
// 0644 - Permisos GNU/Linux
// 100 - Tamaño en bytes
if(!$sh = shmop_open(0xff3, "c", 0644, 100))
{
die('Error creando segmento de memoria compartido');
}
// El 0 es el offset sobre el segmento de memoria, para leer desde el principio 0
shmop_write($sh, "mi segmento de memoria compartida",0);
$my_string = shmop_read($sh, 0, strlen("mi segmento de memoria compartida"));
echo $my_string;
shmop_close($sh);
?>
Comentarios :
No hay comentarios »
Estas funciones no precisan la instalación de extensiones especificas pero si la compilación de tu php con el parámetro --enable-shmop
Esta opción nos permite tener disponibles los siguientes comandos
- shmop_close — Cierra un segmento de memoria compartida
-shmop_delete — Borra un segmento de memoria compartida
- shmop_open — Crea o abre un segmento de memoria compartida
- shmop_read — Lee un segmento de memoria compartida
- shmop_size — Obtiene el tamaño de un segmento de memoria compartida
- shmop_write — Escribe datos en un segmento de memoria compartida
Se emplean de manera analoga a como lo hariamos con un fichero o con un socket
Primero abrimos el segmento compartido con chmop_open, luego leemos o escribimos (las dos opciones son posibles a diferencia de los fifos en GNU/Linux donde o abrimos el fifo para lectura o para escritura) con shmop_read o shmop_write. Y finalmente cerramos el segmento de memoria compartido con chmop_close.
Este seria un ejemplo sencillo
<?php
//0xff3 - identificador segmento, se debe utilizar en todos los segmentos a compartir
// "c" - Opciones: c para crear, a para acceder, w acceder lectura/escritura y n crear nuevo segmento
// 0644 - Permisos GNU/Linux
// 100 - Tamaño en bytes
if(!$sh = shmop_open(0xff3, "c", 0644, 100))
{
die('Error creando segmento de memoria compartido');
}
// El 0 es el offset sobre el segmento de memoria, para leer desde el principio 0
shmop_write($sh, "mi segmento de memoria compartida",0);
$my_string = shmop_read($sh, 0, strlen("mi segmento de memoria compartida"));
echo $my_string;
shmop_close($sh);
?>
Categorías : GNU/Linux
Referencias : No hay referencias »



Referencias
No hay referencias