<?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 => 'pt_BR',
  ),
  'this' => 
  array (
    0 => 'book.eio.php',
    1 => 'Eio',
    2 => 'Eio',
  ),
  'up' => 
  array (
    0 => 'refs.fileprocess.process.php',
    1 => 'Extens&otilde;es para Controle de Processo',
  ),
  'prev' => 
  array (
    0 => 'refs.fileprocess.process.php',
    1 => 'Extens&otilde;es para Controle de Processo',
  ),
  'next' => 
  array (
    0 => 'eio.setup.php',
    1 => 'Instala&ccedil;&atilde;o/Configura&ccedil;&atilde;o',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'pt_BR',
    '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">Introdução</h1>
  <p class="simpara">
   Esta extensão fornece E/S POSIX assíncrona por meio da biblioteca 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 extensão não está
disponível em plataformas Windows.</span></p></blockquote>

  <p class="para">

  <div class="warning"><strong class="warning">Aviso</strong>
  <p class="simpara">
   É importante estar ciente de que cada solicitação é executada em um thread e a
   ordem de execução das solicitações enfileiradas continuamente é basicamente
   imprevisível. Por exemplo, o trecho de código a seguir está incorreto.
  </p>
  </div>

  <div class="example" id="example-1">
  <p><strong>Exemplo #1 Requisições incorretas</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">// Solicitação para criar link simbólico de $filename para $link<br /></span><span style="color: #0000BB">eio_symlink</span><span style="color: #007700">(</span><span style="color: #0000BB">$filename</span><span style="color: #007700">, </span><span style="color: #0000BB">$link</span><span style="color: #007700">);<br /><br /></span><span style="color: #FF8000">// Solicitação para mover $filename para $new_filename<br /></span><span style="color: #0000BB">eio_rename</span><span style="color: #007700">(</span><span style="color: #0000BB">$filename</span><span style="color: #007700">, </span><span style="color: #0000BB">$new_filename</span><span style="color: #007700">);<br /><br /></span><span style="color: #FF8000">// Processa solicitações<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>

   No exemplo acima a solicitação <span class="function"><a href="function.eio-rename.php" class="function">eio_rename()</a></span> pode terminar
   antes de <span class="function"><a href="function.eio-symlink.php" class="function">eio_symlink()</a></span>. Para corrigir, pode-se chamar <span class="function"><a href="function.eio-rename.php" class="function">eio_rename()</a></span>
   na função 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>Exemplo #2 Chamando solicitação de uma chamada de solicitação</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">my_symlink_done</span><span style="color: #007700">(</span><span style="color: #0000BB">$filename</span><span style="color: #007700">, </span><span style="color: #0000BB">$result</span><span style="color: #007700">) {<br /> </span><span style="color: #FF8000">// Solicitação para mover $filename para $new_filename<br /> </span><span style="color: #0000BB">eio_rename</span><span style="color: #007700">(</span><span style="color: #0000BB">$filename</span><span style="color: #007700">, </span><span style="color: #DD0000">"/path/to/new-name"</span><span style="color: #007700">);<br /><br /> </span><span style="color: #FF8000">// Processa solicitações<br /> </span><span style="color: #0000BB">eio_event_loop</span><span style="color: #007700">();<br />}<br /><br /></span><span style="color: #FF8000">// Solicitação para criar ligação simbólica de $filename para $link<br /></span><span style="color: #0000BB">eio_symlink</span><span style="color: #007700">(</span><span style="color: #0000BB">$filename</span><span style="color: #007700">, </span><span style="color: #0000BB">$link</span><span style="color: #007700">, </span><span style="color: #0000BB">EIO_PRI_DEFAULT</span><span style="color: #007700">, </span><span style="color: #DD0000">"my_symlink_done"</span><span style="color: #007700">, </span><span style="color: #0000BB">$filename</span><span style="color: #007700">);<br /><br /></span><span style="color: #FF8000">// Processa solicitações<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, pode-se criar um grupo de solicitações:

  <div class="example" id="example-3">
   <p><strong>Exemplo #3 Chamando solicitação de uma chamada de solicitação</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">/* É chamado quando as solicitações do grupo são concluídas */<br /></span><span style="color: #007700">function </span><span style="color: #0000BB">my_grp_done</span><span style="color: #007700">(</span><span style="color: #0000BB">$data</span><span style="color: #007700">, </span><span style="color: #0000BB">$result</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">my_symlink_done</span><span style="color: #007700">(</span><span style="color: #0000BB">$filename</span><span style="color: #007700">, </span><span style="color: #0000BB">$result</span><span style="color: #007700">) {<br /> </span><span style="color: #FF8000">// Cria a solicitação eio_rename e adiciona-a ao grupo<br /> </span><span style="color: #0000BB">$req </span><span style="color: #007700">= </span><span style="color: #0000BB">eio_rename</span><span style="color: #007700">(</span><span style="color: #0000BB">$filename</span><span style="color: #007700">, </span><span style="color: #DD0000">"/path/to/new-name"</span><span style="color: #007700">);<br /> </span><span style="color: #0000BB">eio_grp_add</span><span style="color: #007700">(</span><span style="color: #0000BB">$grp</span><span style="color: #007700">, </span><span style="color: #0000BB">$req</span><span style="color: #007700">);<br /> </span><span style="color: #FF8000">// Pode-se adicionar mais solicitações...<br /></span><span style="color: #007700">}<br /><br /></span><span style="color: #FF8000">// Cria um grupo de solicitações<br /></span><span style="color: #0000BB">$grp </span><span style="color: #007700">= </span><span style="color: #0000BB">eio_grp</span><span style="color: #007700">(</span><span style="color: #DD0000">"my_grp_done"</span><span style="color: #007700">, </span><span style="color: #DD0000">"my_grp_data"</span><span style="color: #007700">);<br /><br /></span><span style="color: #FF8000">// Cria a solicitação eio_symlink e adiciona-a ao grupo<br />// Passa $filename para o retorno de chamada<br /></span><span style="color: #0000BB">$req </span><span style="color: #007700">= </span><span style="color: #0000BB">eio_symlink</span><span style="color: #007700">(</span><span style="color: #0000BB">$filename</span><span style="color: #007700">, </span><span style="color: #0000BB">$link</span><span style="color: #007700">,<br />  </span><span style="color: #0000BB">EIO_PRI_DEFAULT</span><span style="color: #007700">, </span><span style="color: #DD0000">"my_symlink_done"</span><span style="color: #007700">, </span><span style="color: #0000BB">$filename</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">eio_grp_add</span><span style="color: #007700">(</span><span style="color: #0000BB">$grp</span><span style="color: #007700">, </span><span style="color: #0000BB">$req</span><span style="color: #007700">);<br /><br /></span><span style="color: #FF8000">// Processa solicitações<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>

  Grupo é um tipo especial de solicitação que pode acumular um conjunto de solicitações
  <em>eio</em> regulares. Isso poderia ser usado para criar uma solicitação complexa
  que abre, lê e fecha um arquivo.
  </p>
  <p class="para">
   Desde a versão 0.3.0 alpha, uma variável usada internamente nas comunicações com o l
   ibeio, poderia ser recuperada com
   <span class="function"><a href="function.eio-get-event-stream.php" class="function">eio_get_event_stream()</a></span>. A variável poderia ser usada p
   ara vincular a um loop de eventos suportado por alguma outra extensão. Pode-se
   organizar um loop de eventos simples onde eio e libevent trabalhem juntos:
  <div class="example" id="example-4">
   <p><strong>Exemplo #4 Usando eio com 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">my_eio_poll</span><span style="color: #007700">(</span><span style="color: #0000BB">$fd</span><span style="color: #007700">, </span><span style="color: #0000BB">$events</span><span style="color: #007700">, </span><span style="color: #0000BB">$arg</span><span style="color: #007700">) {<br />    </span><span style="color: #FF8000">/* Algum regulamento do libevent pode estar aqui.. */<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">/* .. e aqui */<br /></span><span style="color: #007700">}<br /><br />function </span><span style="color: #0000BB">my_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">$event </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 fluxo é usado para vincular com libevent<br /></span><span style="color: #0000BB">$fd </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">"my_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">"my_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">/* algumas outras chamadas eio_* aqui... */<br /><br /><br />// define opções de evento<br /></span><span style="color: #0000BB">event_set</span><span style="color: #007700">(</span><span style="color: #0000BB">$event</span><span style="color: #007700">, </span><span style="color: #0000BB">$fd</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">"my_eio_poll"</span><span style="color: #007700">, array(</span><span style="color: #0000BB">$event</span><span style="color: #007700">, </span><span style="color: #0000BB">$base</span><span style="color: #007700">));<br /><br /></span><span style="color: #FF8000">// define a base de eventos<br /></span><span style="color: #0000BB">event_base_set</span><span style="color: #007700">(</span><span style="color: #0000BB">$event</span><span style="color: #007700">, </span><span style="color: #0000BB">$base</span><span style="color: #007700">);<br /><br /></span><span style="color: #FF8000">// habilita evento<br /></span><span style="color: #0000BB">event_add</span><span style="color: #007700">(</span><span style="color: #0000BB">$event</span><span style="color: #007700">);<br /><br /></span><span style="color: #FF8000">// inicia loop 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">/* O mesmo estará disponível através da interface libevent em 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">Instala&ccedil;&atilde;o/Configura&ccedil;&atilde;o</a><ul class="chunklist chunklist_book chunklist_children"><li><a href="eio.requirements.php">Depend&ecirc;ncias</a></li><li><a href="eio.installation.php">Instala&ccedil;&atilde;o</a></li><li><a href="eio.resources.php">Tipos de Recurso</a></li></ul></li><li><a href="eio.constants.php">Constantes predefinidas</a></li><li><a href="eio.examples.php">Exemplos</a></li><li><a href="ref.eio.php">Fun&ccedil;&otilde;es de Eio</a><ul class="chunklist chunklist_book chunklist_children"><li><a href="function.eio-busy.php">eio_busy</a> — Aumenta artificialmente a carga. Pode ser &uacute;til em testes,
  benchmarking</li><li><a href="function.eio-cancel.php">eio_cancel</a> — Cancela uma requisi&ccedil;&atilde;o</li><li><a href="function.eio-chmod.php">eio_chmod</a> — Altera permiss&otilde;es de arquivo/diret&oacute;rio</li><li><a href="function.eio-chown.php">eio_chown</a> — Altera permiss&otilde;es de arquivo/diret&oacute;rio</li><li><a href="function.eio-close.php">eio_close</a> — Fecha arquivo</li><li><a href="function.eio-custom.php">eio_custom</a> — Executa requisi&ccedil;&atilde;o personalizada como qualquer outra chamada eio_*</li><li><a href="function.eio-dup2.php">eio_dup2</a> — Duplica um descritor de arquivo</li><li><a href="function.eio-event-loop.php">eio_event_loop</a> — Consulta a libeio at&eacute; que todas as requisi&ccedil;&otilde;es tenham conclu&iacute;do</li><li><a href="function.eio-fallocate.php">eio_fallocate</a> — Permite ao chamador manipular diretamente o espa&ccedil;o alocado
  em disco para um arquivo</li><li><a href="function.eio-fchmod.php">eio_fchmod</a> — Altera permiss&otilde;es de arquivo</li><li><a href="function.eio-fchown.php">eio_fchown</a> — Altera propriet&aacute;rio de arquivo</li><li><a href="function.eio-fdatasync.php">eio_fdatasync</a> — Sincroniza o estado central de um arquivo com o dispositivo de armazenamento</li><li><a href="function.eio-fstat.php">eio_fstat</a> — Obt&eacute;m status de arquivo</li><li><a href="function.eio-fstatvfs.php">eio_fstatvfs</a> — Obt&eacute;m estat&iacute;sticas de sistema de um arquivo</li><li><a href="function.eio-fsync.php">eio_fsync</a> — Sincroniza o estado central de um arquivo com o dispositivo de armazenamento</li><li><a href="function.eio-ftruncate.php">eio_ftruncate</a> — Trunca um arquivo</li><li><a href="function.eio-futime.php">eio_futime</a> — Altera o hor&aacute;rio de &uacute;ltimo acesso e &uacute;ltima modifica&ccedil;&atilde;o de um arquivo</li><li><a href="function.eio-get-event-stream.php">eio_get_event_stream</a> — Obt&eacute;m fluxo representando uma vari&aacute;vel usada em comunica&ccedil;&otilde;es internas com libeio</li><li><a href="function.eio-get-last-error.php">eio_get_last_error</a> — Retorna uma string que descreve o &uacute;ltimo erro associado a um recurso de requisi&ccedil;&atilde;o</li><li><a href="function.eio-grp.php">eio_grp</a> — Cria um grupo de requisi&ccedil;&otilde;es</li><li><a href="function.eio-grp-add.php">eio_grp_add</a> — Adiciona uma requisi&ccedil;&atilde;o ao grupo de requisi&ccedil;&otilde;es</li><li><a href="function.eio-grp-cancel.php">eio_grp_cancel</a> — Cancela um grupo de requisi&ccedil;&otilde;es</li><li><a href="function.eio-grp-limit.php">eio_grp_limit</a> — Define limite de grupo</li><li><a href="function.eio-init.php">eio_init</a> — (Re-)inicializa a Eio</li><li><a href="function.eio-link.php">eio_link</a> — Cria uma liga&ccedil;&atilde;o f&iacute;sica para um arquivo</li><li><a href="function.eio-lstat.php">eio_lstat</a> — Obt&eacute;m status de arquivo</li><li><a href="function.eio-mkdir.php">eio_mkdir</a> — Cria diret&oacute;rio</li><li><a href="function.eio-mknod.php">eio_mknod</a> — Cria arquivo normal ou especial</li><li><a href="function.eio-nop.php">eio_nop</a> — N&atilde;o faz nada, exceto passar por todo o ciclo de requisi&ccedil;&atilde;o</li><li><a href="function.eio-npending.php">eio_npending</a> — Retorna o n&uacute;mero de requisi&ccedil;&otilde;es conclu&iacute;das, mas n&atilde;o tratadas</li><li><a href="function.eio-nready.php">eio_nready</a> — Retorna o n&uacute;mero de requisi&ccedil;&otilde;es ainda n&atilde;o tratadas</li><li><a href="function.eio-nreqs.php">eio_nreqs</a> — Retorna o n&uacute;mero de requisi&ccedil;&otilde;es a serem processadas</li><li><a href="function.eio-nthreads.php">eio_nthreads</a> — Retorna o n&uacute;mero de threads em uso</li><li><a href="function.eio-open.php">eio_open</a> — Abre um arquivo</li><li><a href="function.eio-poll.php">eio_poll</a> — Pode ser chamada sempre que houver solicita&ccedil;&otilde;es pendentes que precisem ser finalizadas</li><li><a href="function.eio-read.php">eio_read</a> — L&ecirc; um descritor de arquivo em determinada posi&ccedil;&atilde;o</li><li><a href="function.eio-readahead.php">eio_readahead</a> — Execute a leitura antecipada do arquivo no cache da p&aacute;gina</li><li><a href="function.eio-readdir.php">eio_readdir</a> — L&ecirc; um diret&oacute;rio inteiro</li><li><a href="function.eio-readlink.php">eio_readlink</a> — L&ecirc; o valor de uma liga&ccedil;&atilde;o simb&oacute;lica</li><li><a href="function.eio-realpath.php">eio_realpath</a> — Obt&eacute;m o caminho absoluto can&ocirc;nico</li><li><a href="function.eio-rename.php">eio_rename</a> — Altera o nome ou localiza&ccedil;&atilde;o de um arquivo</li><li><a href="function.eio-rmdir.php">eio_rmdir</a> — Remove um diret&oacute;rio</li><li><a href="function.eio-seek.php">eio_seek</a> — Aponta para uma posi&ccedil;&atilde;o</li><li><a href="function.eio-sendfile.php">eio_sendfile</a> — Transfere dados entre descritores de arquivo</li><li><a href="function.eio-set-max-idle.php">eio_set_max_idle</a> — Define o n&uacute;mero m&aacute;ximo de threads ociosas</li><li><a href="function.eio-set-max-parallel.php">eio_set_max_parallel</a> — Define n&uacute;mero m&aacute;ximo de threads paralelas</li><li><a href="function.eio-set-max-poll-reqs.php">eio_set_max_poll_reqs</a> — Define n&uacute;mero m&aacute;ximo de requisi&ccedil;&otilde;es processadas em uma consulta</li><li><a href="function.eio-set-max-poll-time.php">eio_set_max_poll_time</a> — Define o tempo m&aacute;ximo de consulta</li><li><a href="function.eio-set-min-parallel.php">eio_set_min_parallel</a> — Define n&uacute;mero m&iacute;nimo de threads paralelas</li><li><a href="function.eio-stat.php">eio_stat</a> — Obt&eacute;m status de arquivo</li><li><a href="function.eio-statvfs.php">eio_statvfs</a> — Obt&eacute;m estat&iacute;sticas do sistema de arquivos</li><li><a href="function.eio-symlink.php">eio_symlink</a> — Cria uma liga&ccedil;&atilde;o simb&oacute;lica</li><li><a href="function.eio-sync.php">eio_sync</a> — Envia o cache em buffer para o disco</li><li><a href="function.eio-sync-file-range.php">eio_sync_file_range</a> — Sincroniza um segmento de arquivo com o disco</li><li><a href="function.eio-syncfs.php">eio_syncfs</a> — Faz a chamada de sistema syncfs do Linux, se dispon&iacute;vel</li><li><a href="function.eio-truncate.php">eio_truncate</a> — Trunca um arquivo</li><li><a href="function.eio-unlink.php">eio_unlink</a> — Remove um nome e possivelmente o arquivo ao qual ele se refere</li><li><a href="function.eio-utime.php">eio_utime</a> — Altera os hor&aacute;rios de &uacute;ltimo acesso e de modifica&ccedil;&atilde;o de um arquivo</li><li><a href="function.eio-write.php">eio_write</a> — Escreve em um arquivo</li></ul></li></ul></div><?php manual_footer($setup); ?>