FIFO ecriture/lecture en php

Signaler
Messages postés
8
Date d'inscription
mercredi 27 avril 2005
Statut
Membre
Dernière intervention
6 octobre 2007
-
Messages postés
1423
Date d'inscription
mardi 14 décembre 2004
Statut
Membre
Dernière intervention
29 décembre 2012
-
bonjour jaimerai savoir comment faire pour Crée un fichier FIFO, ensuite ecrire et lire dans le fichier, en PHP !
tres urgent!
je vous remercie davance !
A voir également:

5 réponses

Messages postés
10839
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
25
Hello,

sur quelle plateforme...?
Messages postés
10839
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
25
Enfin bref :
http://fr2.php.net/manual/fr/ref.posix.php

sinon, avec les fopen() et dérivés, tu peux peut-être y arriver.
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
41
Salut,

FIFO = une pipe ?



comme sous linux :

cat /dev/zero > /dev/hda1 (ne pas essayer...)

ou encore :

ps -ea | grep apache



c'est bien de ça que tu parles ?



posix_mkfifo('var/IrcPipe', 0644) or die('Création de pipe impossible !');



mais bon, je me suis arrété là... j'ai pas réussi à aller plus loin, alors j'ai décidé d'utiliser des fichiers....

In a dream, I saw me, drop dead... U was there, U cried... It was just a dream, if I die, U won't cry, maybe, U'll be happy

Mon site (articles sur la programmation et programmes)
Messages postés
8
Date d'inscription
mercredi 27 avril 2005
Statut
Membre
Dernière intervention
6 octobre 2007

En effet je dois faire un petit programme en php, qui permet de créer un fichier FIFO a laide de la fonction
posix_mkfifo()
ensuite deffectuer une ecriture* / lecture

*Par exemple: BONJOUR !
Messages postés
1423
Date d'inscription
mardi 14 décembre 2004
Statut
Membre
Dernière intervention
29 décembre 2012
4
Hum...
J'ai effectué un projet il y a peu et il consistais a utiliser XMMSpipe pour controler XMMS depuis une machine distante.
Pour l ecriture j'ai utilisé directement la fonction shell_exec();
pour la lecture néanmoins, comme je n arrivais pas a utiliser de façon convenable le fopen et le fread car la lecture etait synchrone je suis passé par le C et le PHP... je m explique:
je voulais recuperer le volume sonore ainsi que la balance appliqué au lecteur.
j ai donc utilisé ceci:

<?php
$descriptorspec = array(
0 => array("pipe", "r"), // stdin est un pipe où le processus va lire
1 => array("pipe", "w"), // stdout est un pipe où le processus va écrire
2 => array("file", "/tmp/error-output.txt", "a"), // stderr est un fichier
);

$process = proc_open("/tmp/msg_pipe-out", $descriptorspec, $pipes);
if (is_resource($process)) {
// $pipes ressemble à :
// 0 => fichier accessible en écriture, connecté à l'entrée standard du processus fils
// 1 => fichier accessible en lecture, connecté à la sortie standard du processus fils
// Toute erreur sera ajoutée au fichier /tmp/error-output.txt

fwrite($pipes[0], " ");
fclose($pipes[0]);

while(!feof($pipes[1])) {
$pipecontent=fgets($pipes[1], 1024);
/*Parser Balance*/
$contentbalance=explode("~",$pipecontent);
echo $contentbalance[1].$contentbalance[2];
/*Parser volume*/
$contentvolume=explode("[",$pipecontent);
echo $contentvolume[1].$contentvolume[2];
}
fclose($pipes[1]);
// Il est important que vous fermiez les pipes avant d'appeler
// proc_close() afin d'éviter un verrouillage.
$return_value = proc_close($process);
/*Renvoie 0 si Ok*/
echo "La commande a retourné $return_value\n";
}
?>

/tmp/msg_pipe-out est le chemin + nom de fichier que j ai utilisé afin d ecrire dans le pipe in et avoir une reponse dans le pipe out

Le programme en C le voici(j avoue qu'il est degeu mais il marche et je n'avais pas spécialement le tps de faire propre)

#include
#include <sys/time.h>
#include <time.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

static void send_command(char* s);

static FILE *in, *out;

static void send_command(char* s)
{
fprintf(out, "%s\n", s);
//using buffered I/O is okay as long as we tell it when it must send
fflush(out);
}

int main()
{
char outpipe[]="/tmp/xmmspipe-out_root.0";
char inpipe[]="/tmp/xmmspipe-in_root.0";

int iVolumeLeft, iVolumeRight,iBalance;
float fRatio;

out = fopen(inpipe, "w");
if (!out) {
fprintf(stderr, "Error: can't open input pipe '%s'\n", inpipe);
return 1;
}

send_command("out on");

//flush outpipe just in case there is some stale output on it
send_command("out flush");

in = fopen(outpipe,"r");
if (!in) {
fprintf(stderr, "Error: can't open output pipe '%s'\n", outpipe);
return 1;
}
send_command("report volume");
fscanf(in,"%d %d", &iVolumeLeft, &iVolumeRight);
/*Traitement si balance n'est pas centree*/
if(iVolumeLeft!=iVolumeRight){
if(iVolumeLeft>iVolumeRight){
fRatio=1-( (float)iVolumeRight/ (float) iVolumeLeft);
iBalance=(int)(fRatio*100);
printf("~-1~%d~\n",iBalance);
}
if(iVolumeLeft-------------------------------------------------------------------------------------------------------
Il vaut mieux poser une question et passer pour bête que le rester toute sa vie