Voir le sujet précédent :: Voir le sujet suivant |
Auteur |
Message |
touti jeune mioche

Inscrit le: 16 Oct 2002 Messages: 46
|
Posté le: Mar Déc 03, 2002 11:33 am Sujet du message: pipe en C sous visual? |
|
|
Bonjour,
je veux développer 2 exécutables qui communique entre eux par pipe. J'ai un prog qui envoie des données par ce pipe et l'autre qui les reçoient. Sauf que à priori il ne reçoit rien. Pkoi?
je code en C sous visual c++. Y a t-il des exemples de code en C sous visual quelque part?
pour info j'ai déjà regardé msdn.
Cordialement
touti |
|
Revenir en haut |
|
 |
Salemioche salemioche


Inscrit le: 05 Avr 2002 Messages: 350 Localisation: FR- BIOT
|
Posté le: Mar Déc 03, 2002 11:39 am Sujet du message: |
|
|
youpee [url]youpee.salemioche.com[/url] utilise enormement les pipes, est ce que tu pourrais mettre l'exrtait de code ou tu definis tes pipes STP _________________ Creer son site - Hebergement - Jumeaux |
|
Revenir en haut |
|
 |
touti jeune mioche

Inscrit le: 16 Oct 2002 Messages: 46
|
Posté le: Mar Déc 03, 2002 11:48 am Sujet du message: |
|
|
voici mon code de l'exécutable qui envoie les données:
#include <stdlib.h>
#include <string.h>
#include <io.h>
#include <fcntl.h>
enum PIPES { READ, WRITE }; /* Constants 0 and 1 for READ and WRITE */
void main( int argc, char *argv[] )
{
int hpipe[2];
char value[255];
if( _pipe( hpipe, 256, O_BINARY ) == -1 )
exit( 1 );
strcpy(value,"envoie dans le pipe");
write( hpipe[WRITE], value, sizeof( value ) );
close( hpipe[READ] );
close( hpipe[WRITE] );
}
il bloque au write |
|
Revenir en haut |
|
 |
Salemioche salemioche


Inscrit le: 05 Avr 2002 Messages: 350 Localisation: FR- BIOT
|
Posté le: Mar Déc 03, 2002 1:51 pm Sujet du message: |
|
|
normal il y a personne pour lire sur le pipe !!
en general apres le pipe on fait un fork, une des deux process
ecrit et l'autre lit !! _________________ Creer son site - Hebergement - Jumeaux |
|
Revenir en haut |
|
 |
touti jeune mioche

Inscrit le: 16 Oct 2002 Messages: 46
|
Posté le: Mar Déc 03, 2002 2:19 pm Sujet du message: |
|
|
je n'ai peut-être rien compris au pipe. Pour moi un pipe c'est un tuyau entre 2 exécutables. Dans mon cas j'ai un exécutable qui envoie des messages dans ce tuyau et un autre exécutable qui les reçoit. Pourrais tu m'éclaircir l'esprit svp? |
|
Revenir en haut |
|
 |
Salemioche salemioche


Inscrit le: 05 Avr 2002 Messages: 350 Localisation: FR- BIOT
|
Posté le: Mar Déc 03, 2002 5:59 pm Sujet du message: |
|
|
c'est exactement ca mais ici tu n'as qu'un seul process !!! _________________ Creer son site - Hebergement - Jumeaux |
|
Revenir en haut |
|
 |
touti jeune mioche

Inscrit le: 16 Oct 2002 Messages: 46
|
Posté le: Mer Déc 04, 2002 10:02 am Sujet du message: |
|
|
ok donc j'avais bien compris. Dans mon cas j'ai 2 exécutables: un client et un serveur. Là je t'ai fournit uniquement le serveur. Ce que je ne comprends pas c'est que j'ouvre bien le pipe des 2 cotés (coté client et coté serveur) mais je n'arrive pas à faire passer des données dedans. y'a t'il une précaution particulière pour ouvrir le pipe des 2 cotés?
voici mon code pour le client:
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <io.h>
#include <fcntl.h>
#include <process.h>
#include <math.h>
enum PIPES { READ, WRITE }; // Constants 0 and 1 for READ and WRITE
void main( int argc, char *argv[] )
{
int hpipe[2];
char value[255];
if( _pipe( hpipe, 256, O_BINARY ) == -1 )
exit( 1 );
strcpy(value,"");
read( hpipe[READ], value, 255 );
printf( "recu du pipe : %s\n",value);
close( hpipe[READ] );
close( hpipe[WRITE] );
}
et voici mon code pour le serveur:
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <io.h>
#include <fcntl.h>
#include <process.h>
#include <math.h>
enum PIPES { READ, WRITE }; /* Constants 0 and 1 for READ and WRITE */
void main( int argc, char *argv[] )
{
int hpipe[2];
char value[255];
if( _pipe( hpipe, 256, O_BINARY ) == -1 )
exit( 1 );
strcpy(value,"envoie dans le pipe");
write( hpipe[WRITE], value, 255 );
close( hpipe[READ] );
close( hpipe[WRITE] );
}
C'est tout simple pourtant, je crée le pipe et ensuite j'envoie des données. Pour le client, je crée le pipe et ensuite je reçoit.
Et pourtant ça ne marche pas, ça bloque au write alors que mon pipe est crée et que j'ai un client qui écoute.
Si quelqu'un a une idée?
Cordialement.
Touti |
|
Revenir en haut |
|
 |
Salemioche salemioche


Inscrit le: 05 Avr 2002 Messages: 350 Localisation: FR- BIOT
|
Posté le: Mer Déc 04, 2002 10:07 am Sujet du message: |
|
|
il peut y a voir enormement de pipes !!! les pipes de ton serveur et de ton clietn sont completement differents.
si tu veux vraiment faire de la programmation inter process, tu vas buter sur pas mal de concepts avant d'arriver a tes fins. je suis pret a repondre a toutes tes questions mais si tu veux vriament progresser rapidement je te conseilles d'investir un peu dans un ouvrage de reference comme :
'advanced programming in the unix environment' de stevens
http://www.amazon.fr/exec/obidos/ASIN/0201563177/171-5791069-8833049
a bientot, _________________ Creer son site - Hebergement - Jumeaux |
|
Revenir en haut |
|
 |
touti jeune mioche

Inscrit le: 16 Oct 2002 Messages: 46
|
Posté le: Mer Déc 04, 2002 10:23 am Sujet du message: |
|
|
ok merci quand meme
touti |
|
Revenir en haut |
|
 |
Petey dummy mioche

Inscrit le: 15 Avr 2004 Messages: 5 Localisation: Region Parisienne
|
Posté le: Jeu Avr 15, 2004 3:28 pm Sujet du message: |
|
|
Oui en fait je croit que vous vous êtes mal compris...
En fait le pipe doit être créer AVANT la séparation des deux processus.
Je travaille desssus aussi en ce moment et le principe est :
1 - Lancement de l'executable
2 - Création du pipe
3 - Séparation des deux processus par un fork. (Et c'est la qu'un processus devient serveur et un autre fils).
4 - Les deux processus peuvent communiquer à travers le pipe !!!!
En fait créer un pipe dans deux executables différent ne marche pas... Les deux executables ne pourront pas communiquer.
Le pipe doit être créer avant le fork...
Voila j'espère avoir été clair (rien n'est moins sur...)  _________________ Comme ils disent à Varsovie : Boire ou conduire, de toute façon on a pas de voiture... |
|
Revenir en haut |
|
 |
|