Eio

Introduction

Cette extension fournit un systÚme POSIX I/O asynchrone via la bibliothÚque C » libeio écrite par Marc Lehmann.

Note: Cette extension n'est pas disponible sur les plates-formes Windows.

Avertissement

Il est important de noter que chaque demande est exécutée dans un thread, et l'ordre d'exécution des demandes en attente n'est pas assuré. Pour l'instant, le code suivant n'est pas correct.

Exemple #1 Demandes incorrectes

<?php
// Demande la création d'un lien symbolique $filename vers $link
eio_symlink($filename, $link);

// Demande de déplacement de $filename vers $new_filename
eio_rename($filename, $new_filename);

// Exécution des demandes
eio_event_loop();
?>
Dans l'exemple ci-dessus, la fonction eio_rename() peut se terminer avant la fonction eio_symlink(). Pour résoudre ce problÚme, il est possible d'appeler la fonction eio_rename() dans la fonction de rappel de la fonction eio_symlink():

Exemple #2 Exécution d'une demande dans la fonction de rappel d'une autre

<?php
function my_symlink_done($filename, $result) {
// Demande de déplacement de $filename vers $new_filename
eio_rename($filename, "/path/to/new-name");

// Exécution des demandes
eio_event_loop();
}

// Demande de création d'un lien symbolique $filename vers $link
eio_symlink($filename, $link, EIO_PRI_DEFAULT, "my_symlink_done", $filename);

// Exécution des demandes
eio_event_loop();
?>
Alternativement, il est possible de créer un groupe de demandes :

Exemple #3 Exécution d'une demande depuis la fonction de rappel d'une autre

<?php
/* Sera appelé lorsque le groupe de demandes aura terminé */
function my_grp_done($data, $result) {
// ...
}

function
my_symlink_done($filename, $result) {
// Crée une demande eio_rename et l'ajoute au groupe
$req = eio_rename($filename, "/path/to/new-name");
eio_grp_add($grp, $req);
// Il est possible d'ajouter d'autres demandes...
}

// Création d'un groupe de demandes
$grp = eio_grp("my_grp_done", "my_grp_data");

// Crée une demande eio_symlink et l'ajoute au groupe
// Passage de $filename Ă  la fonction de rappel
$req = eio_symlink($filename, $link,
EIO_PRI_DEFAULT, "my_symlink_done", $filename);
eio_grp_add($grp, $req);

// Exécution des demandes
eio_event_loop();
?>
Un groupe est une demande spĂ©ciale qui peut cumuler un jeu de demandes eio. Ce mĂ©canisme peut ĂȘtre utile pour crĂ©er une demande complexe qui ouvre, lit et ferme un fichier.

À partir de la version 0.3.0 alpha, une variable utilisĂ©e dans les communications internes avec libeio peut ĂȘtre rĂ©cupĂ©rĂ©e avec la fonction eio_get_event_stream(). La variable peut ĂȘtre utilisĂ©e pour lier une boucle d'Ă©vĂ©nements avec d'autres extensions. Il est possible d'organiser une boucle d'Ă©vĂ©nements oĂč libeio et libevent fonctionnent ensemble :

Exemple #4 Utilisation d'eio et libevent

<?php
function my_eio_poll($fd, $events, $arg) {
/* Quelques régulations libevent peuvent venir ici .. */
if (eio_nreqs()) {
eio_poll();
}
/* .. et ici */
}

function
my_res_cb($d, $r) {
var_dump($r); var_dump($d);
}

$base = event_base_new();
$event = event_new();

// Ce flux est utilisé pour se lier avec libevent
$fd = eio_get_event_stream();

eio_nop(EIO_PRI_DEFAULT, "my_res_cb", "nop data");
eio_mkdir("/tmp/abc-eio-temp", 0750, EIO_PRI_DEFAULT, "my_res_cb", "mkdir data");
/* d'autres appels eio_* ici ... */


// Définit les drapeaux des événements
event_set($event, $fd, EV_READ /*| EV_PERSIST*/, "my_eio_poll", array($event, $base));

// Définit l'événement de base
event_base_set($event, $base);

// Active l'événement
event_add($event);

// Démarre la boucle des événements
event_base_loop($base);

/* La mĂȘme chose est disponible via l'interface libevent bufferisĂ©e */
?>
  • Installation/Configuration
  • Constantes prĂ©-dĂ©finies
  • Exemples
  • Fonctions Eio
    • eio_busy — Augmente artificiellement la charge. Utile dans le cadre de tests
    • eio_cancel — Annule une requĂȘte
    • eio_chmod — Modifie les permissions d'un fichier/dossier
    • eio_chown — Modifie le propriĂ©taire d'un fichier/dossier
    • eio_close — Ferme un fichier
    • eio_custom — ExĂ©cute une demande personnalisĂ©e comme l'appel Ă  une des fonctions eio_*
    • eio_dup2 — Duplique un descripteur de fichier
    • eio_event_loop — Boucle libeio tant que les requĂȘtes s'exĂ©cutent
    • eio_fallocate — Autorise l'appelant Ă  manipuler directement l'espace disque allouĂ© pour un fichier
    • eio_fchmod — Modifie les permissions sur un fichier
    • eio_fchown — Modifie le propriĂ©taire du fichier
    • eio_fdatasync — Synchronise le statut interne d'un fichier avec le pĂ©riphĂ©rique de stockage
    • eio_fstat — RĂ©cupĂšre le statut d'un fichier
    • eio_fstatvfs — RĂ©cupĂšre des statistiques sur le systĂšme de fichiers
    • eio_fsync — Synchronise le statut interne d'un fichier avec le pĂ©riphĂ©rique de stockage
    • eio_ftruncate — Tronque un fichier
    • eio_futime — Modifie l'heure du dernier accĂšs et de la derniĂšre modification d'un fichier
    • eio_get_event_stream — RĂ©cupĂšre le flux reprĂ©sentant une variable utilisĂ©e dans les communications internes avec libeio
    • eio_get_last_error — Retourne une chaĂźne dĂ©crivant la derniĂšre erreur associĂ©e avec la ressource demandĂ©e
    • eio_grp — CrĂ©e un groupe de requĂȘtes
    • eio_grp_add — Ajoute une requĂȘte au groupe de requĂȘtes
    • eio_grp_cancel — Annule un groupe de requĂȘtes
    • eio_grp_limit — DĂ©finit la limite d'un groupe
    • eio_init — (Re-)initialise Eio
    • eio_link — CrĂ©e un lien fort sur un fichier
    • eio_lstat — RĂ©cupĂšre le statut d'un fichier
    • eio_mkdir — CrĂ©e un dossier
    • eio_mknod — CrĂ©e un fichier spĂ©cial ou ordinaire
    • eio_nop — Ne fait rien, mis Ă  part le fait de parcourir l'ensemble du cycle des requĂȘtes
    • eio_npending — Retourne le nombre de requĂȘtes terminĂ©es, mais non traitĂ©es
    • eio_nready — Retourne le nombre de requĂȘtes pas encore gĂ©rĂ©es
    • eio_nreqs — Retourne le nombre de requĂȘtes restant Ă  exĂ©cuter
    • eio_nthreads — Retourne le nombre de threads actuellement utilisĂ©s
    • eio_open — Ouvre un fichier
    • eio_poll — VĂ©rifie s'il reste des requĂȘtes en cours d'exĂ©cution
    • eio_read — Lit un descripteur de fichier Ă  une position donnĂ©e
    • eio_readahead — Effectue un readahead sur le fichier dans le cache d'une page
    • eio_readdir — Lit le contenu d'un dossier
    • eio_readlink — Lit la valeur d'un lien symbolique
    • eio_realpath — RĂ©cupĂšre le nom du chemin absolu canonisĂ©
    • eio_rename — Modifie le nom ou le chemin d'un fichier
    • eio_rmdir — Supprime un dossier
    • eio_seek — Repositionne le curseur d'un fichier ouvert
    • eio_sendfile — TransfĂšre des donnĂ©es entre des descripteurs de fichiers
    • eio_set_max_idle — DĂ©finit le nombre maximal de threads inactifs
    • eio_set_max_parallel — DĂ©finit le nombre maximal de threads en parallĂšle
    • eio_set_max_poll_reqs — DĂ©finit le nombre maximal de requĂȘtes traitĂ©es dans un cycle d'interrogation
    • eio_set_max_poll_time — DĂ©finit la durĂ©e maximale d'une interrogation
    • eio_set_min_parallel — DĂ©finit le nombre minimum de threads parallĂšles
    • eio_stat — RĂ©cupĂšre le statut d'un fichier
    • eio_statvfs — RĂ©cupĂšre les statistiques du systĂšme de fichiers
    • eio_symlink — CrĂ©e un lien symbolique
    • eio_sync — Valide le cache du buffer sur le disque
    • eio_sync_file_range — Synchronise un segment de fichier avec le disque
    • eio_syncfs — Appelle la fonction systĂšme Linux syncfs, si disponible
    • eio_truncate — Tronque un fichier
    • eio_unlink — Supprime un nom et Ă©ventuellement, le fichier qui s'y rĂ©fĂšre
    • eio_utime — Modifie l'heure du dernier accĂšs et de la derniĂšre modification d'un fichier
    • eio_write — Écrit dans un fichier
add a note

User Contributed Notes

There are no user contributed notes for this page.