<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/refs.fileprocess.process.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'es',
  ),
  'this' => 
  array (
    0 => 'book.eio.php',
    1 => 'Eio',
    2 => 'Eio',
  ),
  'up' => 
  array (
    0 => 'refs.fileprocess.process.php',
    1 => 'Extensiones de control de procesos',
  ),
  'prev' => 
  array (
    0 => 'refs.fileprocess.process.php',
    1 => 'Extensiones de control de procesos',
  ),
  'next' => 
  array (
    0 => 'eio.setup.php',
    1 => 'Instalaci&oacute;n/Configuraci&oacute;n',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'es',
    'path' => 'reference/eio/book.xml',
  ),
  'history' => 
  array (
  ),
  'extra_header_links' => 
  array (
    'rel' => 'alternate',
    'href' => '/manual/en/feeds/book.eio.atom',
    'type' => 'application/atom+xml',
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="book.eio" class="book">
 
 <h1 class="title">Eio</h1>
 
 
 <div id="intro.eio" class="preface">
  <h1 class="title">Introducción</h1>
  <p class="simpara">
   Esta extensión proporciona E/S POSIX asíncrona a través de
   la biblioteca de C <a href="http://software.schmorp.de/pkg/libeio.html" class="link external">&raquo;&nbsp;libeio</a>
   escrita por Marc Lehmann.
  </p>

  <blockquote class="note"><p><strong class="note">Nota</strong>: <span class="simpara">
 Esta extensión no está disponible en las plataformas Windows.
</span></p></blockquote>

  <p class="para">

   <div class="warning"><strong class="warning">Advertencia</strong>
    <p class="simpara">
     Es importante tener en cuenta que cada solicitud se ejecuta en un hilo, y el
     orden de ejecución continua de peticiones en cola es basicamente
     impredecible. Por ejemplo, el siguiente trozo de código es incorrecto.
    </p>
   </div>

   <div class="example" id="example-1">
    <p><strong>Ejemplo #1 Peticiones incorrectas</strong></p>
    <div class="example-contents"><div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #FF8000">// Petición para crear un enlace simbólico de $nombre_archivo a $enlace<br /></span><span style="color: #0000BB">eio_symlink</span><span style="color: #007700">(</span><span style="color: #0000BB">$nombre_archivo</span><span style="color: #007700">, </span><span style="color: #0000BB">$enlace</span><span style="color: #007700">);<br /><br /></span><span style="color: #FF8000">// Petición para mover $nombre_archivo a $nuevo_nombre_archivo<br /></span><span style="color: #0000BB">eio_rename</span><span style="color: #007700">(</span><span style="color: #0000BB">$nombre_archivo</span><span style="color: #007700">, </span><span style="color: #0000BB">$nuevo_nombre_archivo</span><span style="color: #007700">);<br /><br /></span><span style="color: #FF8000">// Procesar las peticiones<br /></span><span style="color: #0000BB">eio_event_loop</span><span style="color: #007700">();<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>

   En el ejemplo de arriba la petición <span class="function"><a href="function.eio-rename.php" class="function">eio_rename()</a></span> puede finalizar
   antes que <span class="function"><a href="function.eio-symlink.php" class="function">eio_symlink()</a></span>. Para corregirlo se podría llamar a <span class="function"><a href="function.eio-rename.php" class="function">eio_rename()</a></span>
   en la llamada de retorno de <span class="function"><a href="function.eio-symlink.php" class="function">eio_symlink()</a></span>:
   <div class="example" id="example-2">
    <p><strong>Ejemplo #2 Llamar a una petición desde una llamada de retorno de petición</strong></p>
    <div class="example-contents"><div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">function </span><span style="color: #0000BB">mi_enlace_simbólico_hecho</span><span style="color: #007700">(</span><span style="color: #0000BB">$nombre_archivo</span><span style="color: #007700">, </span><span style="color: #0000BB">$resultado</span><span style="color: #007700">) {<br /> </span><span style="color: #FF8000">// Petición para mover $nombre_archivo a $nuevo_nombre_archivo<br /> </span><span style="color: #0000BB">eio_rename</span><span style="color: #007700">(</span><span style="color: #0000BB">$nombre_archivo</span><span style="color: #007700">, </span><span style="color: #DD0000">"/ruta/a/nuevo-nombre"</span><span style="color: #007700">);<br /><br /> </span><span style="color: #FF8000">// Procesar las peticiones<br /> </span><span style="color: #0000BB">eio_event_loop</span><span style="color: #007700">();<br />}<br /><br /></span><span style="color: #FF8000">// Petición para crear un enlace simbólico de $nombre_archivo a $enlace<br /></span><span style="color: #0000BB">eio_symlink</span><span style="color: #007700">(</span><span style="color: #0000BB">$nombre_archivo</span><span style="color: #007700">, </span><span style="color: #0000BB">$enlace</span><span style="color: #007700">, </span><span style="color: #0000BB">EIO_PRI_DEFAULT</span><span style="color: #007700">, </span><span style="color: #DD0000">"mi_enlace_simbólico_hecho"</span><span style="color: #007700">, </span><span style="color: #0000BB">$nombre_archivo</span><span style="color: #007700">);<br /><br /> </span><span style="color: #FF8000">// Procesar las peticiones<br /></span><span style="color: #0000BB">eio_event_loop</span><span style="color: #007700">();<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>

   Alternativamente, podría querer crear un grupo de peticiones:

   <div class="example" id="example-3">
    <p><strong>Ejemplo #3 Llamar a una petición desde una llamada de retorno de petición</strong></p>
    <div class="example-contents"><div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #FF8000">/* Se llama cuando el grupo de peticiones está hecho */<br /></span><span style="color: #007700">function </span><span style="color: #0000BB">mi_grupo_hecho</span><span style="color: #007700">(</span><span style="color: #0000BB">$data</span><span style="color: #007700">, </span><span style="color: #0000BB">$resultado</span><span style="color: #007700">) {<br /> </span><span style="color: #FF8000">// ...<br /></span><span style="color: #007700">}<br /><br />function </span><span style="color: #0000BB">mi_enlace_simbólico_hecho</span><span style="color: #007700">(</span><span style="color: #0000BB">$nombre_archivo</span><span style="color: #007700">, </span><span style="color: #0000BB">$resultado</span><span style="color: #007700">) {<br /> </span><span style="color: #FF8000">// Crear una petición eio_rename y añadirla al grupo<br /> </span><span style="color: #0000BB">$petición </span><span style="color: #007700">= </span><span style="color: #0000BB">eio_rename</span><span style="color: #007700">(</span><span style="color: #0000BB">$nombre_archivo</span><span style="color: #007700">, </span><span style="color: #DD0000">"/ruta/a/nuevo-nombre"</span><span style="color: #007700">);<br /> </span><span style="color: #0000BB">eio_grp_add</span><span style="color: #007700">(</span><span style="color: #0000BB">$grupo</span><span style="color: #007700">, </span><span style="color: #0000BB">$petición</span><span style="color: #007700">);<br /> </span><span style="color: #FF8000">// Podría querer añadir más peticiones...<br /></span><span style="color: #007700">}<br /><br /></span><span style="color: #FF8000">// Crear un grupo de peticiones<br /></span><span style="color: #0000BB">$grupo </span><span style="color: #007700">= </span><span style="color: #0000BB">eio_grp</span><span style="color: #007700">(</span><span style="color: #DD0000">"mi_grupo_hecho"</span><span style="color: #007700">, </span><span style="color: #DD0000">"mis_datos_de_grupo"</span><span style="color: #007700">);<br /><br /></span><span style="color: #FF8000">// Crear una petición eio_symlink y añadirla al grupo<br />// Pasar $nombre_archivo a la llamada de retorno<br /></span><span style="color: #0000BB">$petición </span><span style="color: #007700">= </span><span style="color: #0000BB">eio_symlink</span><span style="color: #007700">(</span><span style="color: #0000BB">$nombre_archivo</span><span style="color: #007700">, </span><span style="color: #0000BB">$enlace</span><span style="color: #007700">,<br />  </span><span style="color: #0000BB">EIO_PRI_DEFAULT</span><span style="color: #007700">, </span><span style="color: #DD0000">"mi_enlace_simbólico_hecho"</span><span style="color: #007700">, </span><span style="color: #0000BB">$nombre_archivo</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">eio_grp_add</span><span style="color: #007700">(</span><span style="color: #0000BB">$grupo</span><span style="color: #007700">, </span><span style="color: #0000BB">$petición</span><span style="color: #007700">);<br /><br /> </span><span style="color: #FF8000">// Procesar las peticiones<br /></span><span style="color: #0000BB">eio_event_loop</span><span style="color: #007700">();<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div></div>

   </div>

   El grupo es un tipo especial de peticion que podría acumular un conjunto de peticiones
   <em>eio</em> regulares. Se podría usar para crear una petición
   compleja para abrir, leer y cerrar un fichero.
  </p>
  <p class="para">
   Desde la versión 0.3.0 alfa, una variable usada internamete en las comunicaciones con
   libeio, podía ser recuperada con
   <span class="function"><a href="function.eio-get-event-stream.php" class="function">eio_get_event_stream()</a></span>. La variable se podría usar
   para vincularse a un bucle de eventos soportado por alguna otra extensión. Se podría
   organizar un sencillo bucle de eventos donde eio y libevent trabajaran juntos:
   <div class="example" id="example-4">
    <p><strong>Ejemplo #4 Usar eio con libevent</strong></p>
    <div class="example-contents"><div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">function </span><span style="color: #0000BB">mi_eio_poll</span><span style="color: #007700">(</span><span style="color: #0000BB">$df</span><span style="color: #007700">, </span><span style="color: #0000BB">$eventos</span><span style="color: #007700">, </span><span style="color: #0000BB">$argumentos</span><span style="color: #007700">) {<br />    </span><span style="color: #FF8000">/* Algunas regulaciones de libevent podrían ir aquí .. */<br />    </span><span style="color: #007700">if (</span><span style="color: #0000BB">eio_nreqs</span><span style="color: #007700">()) {<br />        </span><span style="color: #0000BB">eio_poll</span><span style="color: #007700">();<br />    }<br />    </span><span style="color: #FF8000">/* .. y aquí */<br /></span><span style="color: #007700">}<br /><br />function </span><span style="color: #0000BB">mi_res_cb</span><span style="color: #007700">(</span><span style="color: #0000BB">$d</span><span style="color: #007700">, </span><span style="color: #0000BB">$r</span><span style="color: #007700">) {<br />    </span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$r</span><span style="color: #007700">); </span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$d</span><span style="color: #007700">);<br />}<br /><br /></span><span style="color: #0000BB">$base </span><span style="color: #007700">= </span><span style="color: #0000BB">event_base_new</span><span style="color: #007700">();<br /></span><span style="color: #0000BB">$evento </span><span style="color: #007700">= </span><span style="color: #0000BB">event_new</span><span style="color: #007700">();<br /><br /></span><span style="color: #FF8000">// Este flujo se usa para vincularse con libevent<br /></span><span style="color: #0000BB">$df </span><span style="color: #007700">= </span><span style="color: #0000BB">eio_get_event_stream</span><span style="color: #007700">();<br /><br /></span><span style="color: #0000BB">eio_nop</span><span style="color: #007700">(</span><span style="color: #0000BB">EIO_PRI_DEFAULT</span><span style="color: #007700">, </span><span style="color: #DD0000">"mi_res_cb"</span><span style="color: #007700">, </span><span style="color: #DD0000">"nop data"</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">eio_mkdir</span><span style="color: #007700">(</span><span style="color: #DD0000">"/tmp/abc-eio-temp"</span><span style="color: #007700">, </span><span style="color: #0000BB">0750</span><span style="color: #007700">, </span><span style="color: #0000BB">EIO_PRI_DEFAULT</span><span style="color: #007700">, </span><span style="color: #DD0000">"mi_res_cb"</span><span style="color: #007700">, </span><span style="color: #DD0000">"mkdir data"</span><span style="color: #007700">);<br /></span><span style="color: #FF8000">/* algunas llamadas eio_* aquí ... */<br /><br /><br />// establecer las banderas del evento<br /></span><span style="color: #0000BB">event_set</span><span style="color: #007700">(</span><span style="color: #0000BB">$evento</span><span style="color: #007700">, </span><span style="color: #0000BB">$df</span><span style="color: #007700">, </span><span style="color: #0000BB">EV_READ </span><span style="color: #FF8000">/*| EV_PERSIST*/</span><span style="color: #007700">, </span><span style="color: #DD0000">"mi_eio_poll"</span><span style="color: #007700">, array(</span><span style="color: #0000BB">$evento</span><span style="color: #007700">, </span><span style="color: #0000BB">$base</span><span style="color: #007700">));<br /><br /></span><span style="color: #FF8000">// Establecer la base del evento<br /></span><span style="color: #0000BB">event_base_set</span><span style="color: #007700">(</span><span style="color: #0000BB">$evento</span><span style="color: #007700">, </span><span style="color: #0000BB">$base</span><span style="color: #007700">);<br /><br /></span><span style="color: #FF8000">// habilitar el evento<br /></span><span style="color: #0000BB">event_add</span><span style="color: #007700">(</span><span style="color: #0000BB">$evento</span><span style="color: #007700">);<br /><br /></span><span style="color: #FF8000">// iniciar el bucle de eventos<br /></span><span style="color: #0000BB">event_base_loop</span><span style="color: #007700">(</span><span style="color: #0000BB">$base</span><span style="color: #007700">);<br /><br /></span><span style="color: #FF8000">/* Lo mismo estará disponible mediante interfaz libevent con buffer */<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div></div>

   </div>

  </p>
 </div>
 
 






 





 






 









<ul class="chunklist chunklist_book"><li><a href="eio.setup.php">Instalaci&oacute;n/Configuraci&oacute;n</a><ul class="chunklist chunklist_book chunklist_children"><li><a href="eio.requirements.php">Requerimientos</a></li><li><a href="eio.installation.php">Instalaci&oacute;n</a></li><li><a href="eio.resources.php">Tipos de recursos</a></li></ul></li><li><a href="eio.constants.php">Constantes predefinidas</a></li><li><a href="eio.examples.php">Ejemplos</a></li><li><a href="ref.eio.php">Funciones Eio</a><ul class="chunklist chunklist_book chunklist_children"><li><a href="function.eio-busy.php">eio_busy</a> — Incrementar artificialmente la carga. Podr&iacute;a ser &uacute;til en pruebas,
   evaluaciones comparativas</li><li><a href="function.eio-cancel.php">eio_cancel</a> — Cancelar una petici&oacute;n</li><li><a href="function.eio-chmod.php">eio_chmod</a> — Cambiar los permisos de fichero/directorio</li><li><a href="function.eio-chown.php">eio_chown</a> — Cambiar los permisos de un fichero/directorio</li><li><a href="function.eio-close.php">eio_close</a> — Cerrar un fichero</li><li><a href="function.eio-custom.php">eio_custom</a> — Ejecutar una petici&oacute;n personalizada como cualquier otra llamada eio_*</li><li><a href="function.eio-dup2.php">eio_dup2</a> — Duplicar un descriptor de fichero</li><li><a href="function.eio-event-loop.php">eio_event_loop</a> — Monitorizar libeio hasta que todas las peticiones sean procesadas</li><li><a href="function.eio-fallocate.php">eio_fallocate</a> — Permitir al llamador manipular directamente el espacio de disco
   asignado a un fichero</li><li><a href="function.eio-fchmod.php">eio_fchmod</a> — Cambiar los permisos de un fichero</li><li><a href="function.eio-fchown.php">eio_fchown</a> — Cambiar el propietario del fichero</li><li><a href="function.eio-fdatasync.php">eio_fdatasync</a> — Sincronizar el estado de ficheros que est&aacute;n en memoria con un dispositivo de almacenamiento</li><li><a href="function.eio-fstat.php">eio_fstat</a> — Obtener el estado de un fichero</li><li><a href="function.eio-fstatvfs.php">eio_fstatvfs</a> — Obtener las estad&iacute;sticas del sistema de ficheros</li><li><a href="function.eio-fsync.php">eio_fsync</a> — Sincronizar el estado de un fichero en memoria con un dispositivo de almacenamiento</li><li><a href="function.eio-ftruncate.php">eio_ftruncate</a> — Truncar un fichero</li><li><a href="function.eio-futime.php">eio_futime</a> — Cambiar los momentos de &uacute;ltimo y acceso y modificaci&oacute;n de un fichero</li><li><a href="function.eio-get-event-stream.php">eio_get_event_stream</a> — Obtiene un flujo que representa una variable usada en comnunicaciones internas con libeio</li><li><a href="function.eio-get-last-error.php">eio_get_last_error</a> — Retorna un string describiendo el &uacute;ltimo error asociado con el recurso solicitado</li><li><a href="function.eio-grp.php">eio_grp</a> — Crear un grupo de peticiones</li><li><a href="function.eio-grp-add.php">eio_grp_add</a> — A&ntilde;adir una petici&oacute;n al grupo de peticiones</li><li><a href="function.eio-grp-cancel.php">eio_grp_cancel</a> — Cancelar un grupo de peticiones</li><li><a href="function.eio-grp-limit.php">eio_grp_limit</a> — Establecer el l&iacute;mite de un grupo</li><li><a href="function.eio-init.php">eio_init</a> — (Re-)inicializa Eio</li><li><a href="function.eio-link.php">eio_link</a> — Crear un enlace duro par un fichero</li><li><a href="function.eio-lstat.php">eio_lstat</a> — Obtener el estado de un fichero</li><li><a href="function.eio-mkdir.php">eio_mkdir</a> — Crear un directorio</li><li><a href="function.eio-mknod.php">eio_mknod</a> — Crear un fichero especial u ordinario</li><li><a href="function.eio-nop.php">eio_nop</a> — No hace nada, s&oacute;lo recorre el ciclo de peticiones entero</li><li><a href="function.eio-npending.php">eio_npending</a> — Devolver el n&uacute;mero de peticiones, excepto las no manejadas</li><li><a href="function.eio-nready.php">eio_nready</a> — Devolver el n&uacute;mero de peticiones a&uacute;n no tratadas</li><li><a href="function.eio-nreqs.php">eio_nreqs</a> — Devuelve el n&uacute;mero de peticiones a ser procesadas</li><li><a href="function.eio-nthreads.php">eio_nthreads</a> — Devuelve el n&uacute;mero de hilos actualmente en uso</li><li><a href="function.eio-open.php">eio_open</a> — Abre un fichero</li><li><a href="function.eio-poll.php">eio_poll</a> — Puede ser llamada siempre que existan peticiones pendientes que necesitan ser finalizadas</li><li><a href="function.eio-read.php">eio_read</a> — Leer de un descriptor de fichero en un &iacute;ndice dado</li><li><a href="function.eio-readahead.php">eio_readahead</a> — Perform file readahead into page cache</li><li><a href="function.eio-readdir.php">eio_readdir</a> — Leer un directorio al completo</li><li><a href="function.eio-readlink.php">eio_readlink</a> — Leer el valor de un enlace simb&oacute;lico</li><li><a href="function.eio-realpath.php">eio_realpath</a> — Obtener el nombre de ruta absoluto canonizado</li><li><a href="function.eio-rename.php">eio_rename</a> — Cambiar el nombre o la ubicaci&oacute;n de un fichero</li><li><a href="function.eio-rmdir.php">eio_rmdir</a> — Eliminar un directorio</li><li><a href="function.eio-seek.php">eio_seek</a> — Reposiciona el cursor de un fichero abierto</li><li><a href="function.eio-sendfile.php">eio_sendfile</a> — Transferir informaci&oacute;n entre descriptores de ficheros</li><li><a href="function.eio-set-max-idle.php">eio_set_max_idle</a> — Establecer el n&uacute;mero m&aacute;ximo de hilos parados</li><li><a href="function.eio-set-max-parallel.php">eio_set_max_parallel</a> — Esteblecer el m&aacute;ximo de hilos paralelos</li><li><a href="function.eio-set-max-poll-reqs.php">eio_set_max_poll_reqs</a> — Establecer el m&aacute;ximo n&uacute;mero de peticiones procesadas en una monitorizaci&oacute;n</li><li><a href="function.eio-set-max-poll-time.php">eio_set_max_poll_time</a> — Establecer el tiempo m&aacute;ximo de monitorizaci&oacute;n</li><li><a href="function.eio-set-min-parallel.php">eio_set_min_parallel</a> — Esteblecer el n&uacute;mero de hilos paralelos m&iacute;nimo</li><li><a href="function.eio-stat.php">eio_stat</a> — Obtener el estado de un fichero</li><li><a href="function.eio-statvfs.php">eio_statvfs</a> — Obtener las estad&iacute;sticas del sistema de ficheros</li><li><a href="function.eio-symlink.php">eio_symlink</a> — Crear un enlace simb&oacute;lico</li><li><a href="function.eio-sync.php">eio_sync</a> — Consignar el cach&eacute; de buffer cache al disco</li><li><a href="function.eio-sync-file-range.php">eio_sync_file_range</a> — Sincornizar un segmento de fichero con el disco</li><li><a href="function.eio-syncfs.php">eio_syncfs</a> — Realizar una llamada al sistema de syncfs de Linux si est&aacute; disponible</li><li><a href="function.eio-truncate.php">eio_truncate</a> — Truncar un fichero</li><li><a href="function.eio-unlink.php">eio_unlink</a> — Borrar un nombre y posiblemente el fichero al que se refiere</li><li><a href="function.eio-utime.php">eio_utime</a> — Cambiar los momentos de &uacute;ltimo y acceso y modificaci&oacute;n de un fichero</li><li><a href="function.eio-write.php">eio_write</a> — Escribir en un fichero</li></ul></li></ul></div><?php manual_footer($setup); ?>