pipe en C sous visual?

 
Poster un nouveau sujet   Répondre au sujet    iprelax.fr Index du Forum -> C sous UNIX et Windows
Voir le sujet précédent :: Voir le sujet suivant  
Auteur Message
touti
jeune mioche
jeune mioche


Inscrit le: 16 Oct 2002
Messages: 46

MessagePosté le: Mar Déc 03, 2002 11:33 am    Sujet du message: pipe en C sous visual? Répondre en citant

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
Voir le profil de l'utilisateur Envoyer un message privé
Salemioche
salemioche
salemioche


Inscrit le: 05 Avr 2002
Messages: 350
Localisation: FR- BIOT

MessagePosté le: Mar Déc 03, 2002 11:39 am    Sujet du message: Répondre en citant

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
Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur Yahoo Messenger MSN Messenger
touti
jeune mioche
jeune mioche


Inscrit le: 16 Oct 2002
Messages: 46

MessagePosté le: Mar Déc 03, 2002 11:48 am    Sujet du message: Répondre en citant

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
Voir le profil de l'utilisateur Envoyer un message privé
Salemioche
salemioche
salemioche


Inscrit le: 05 Avr 2002
Messages: 350
Localisation: FR- BIOT

MessagePosté le: Mar Déc 03, 2002 1:51 pm    Sujet du message: Répondre en citant

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
Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur Yahoo Messenger MSN Messenger
touti
jeune mioche
jeune mioche


Inscrit le: 16 Oct 2002
Messages: 46

MessagePosté le: Mar Déc 03, 2002 2:19 pm    Sujet du message: Répondre en citant

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
Voir le profil de l'utilisateur Envoyer un message privé
Salemioche
salemioche
salemioche


Inscrit le: 05 Avr 2002
Messages: 350
Localisation: FR- BIOT

MessagePosté le: Mar Déc 03, 2002 5:59 pm    Sujet du message: Répondre en citant

c'est exactement ca mais ici tu n'as qu'un seul process !!!
_________________
Creer son site - Hebergement - Jumeaux
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur Yahoo Messenger MSN Messenger
touti
jeune mioche
jeune mioche


Inscrit le: 16 Oct 2002
Messages: 46

MessagePosté le: Mer Déc 04, 2002 10:02 am    Sujet du message: Répondre en citant

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
Voir le profil de l'utilisateur Envoyer un message privé
Salemioche
salemioche
salemioche


Inscrit le: 05 Avr 2002
Messages: 350
Localisation: FR- BIOT

MessagePosté le: Mer Déc 04, 2002 10:07 am    Sujet du message: Répondre en citant

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
Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur Yahoo Messenger MSN Messenger
touti
jeune mioche
jeune mioche


Inscrit le: 16 Oct 2002
Messages: 46

MessagePosté le: Mer Déc 04, 2002 10:23 am    Sujet du message: Répondre en citant

ok merci quand meme

touti
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
Petey
dummy mioche
dummy mioche


Inscrit le: 15 Avr 2004
Messages: 5
Localisation: Region Parisienne

MessagePosté le: Jeu Avr 15, 2004 3:28 pm    Sujet du message: Répondre en citant

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...) Wink
_________________
Comme ils disent à Varsovie : Boire ou conduire, de toute façon on a pas de voiture...
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger
Montrer les messages depuis:   
Poster un nouveau sujet   Répondre au sujet    iprelax.fr Index du Forum -> C sous UNIX et Windows Toutes les heures sont au format CET (Europe)
Page 1 sur 1

 
Sauter vers:  
Vous ne pouvez pas poster de nouveaux sujets dans ce forum
Vous ne pouvez pas répondre aux sujets dans ce forum
Vous ne pouvez pas éditer vos messages dans ce forum
Vous ne pouvez pas supprimer vos messages dans ce forum
Vous ne pouvez pas voter dans les sondages de ce forum
Affilzen SARL : Mention légale