IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

creation d'un tuyau de communication


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Avatar de Blo0d4x3
    Inscrit en
    Octobre 2003
    Messages
    593
    Détails du profil
    Informations forums :
    Inscription : Octobre 2003
    Messages : 593
    Par défaut creation d'un tuyau de communication
    Bonjour, j'ai une petite question concernant les tuyeaux, je voudrais etablir ce moyen de communication entre deux process, jusque la ca va. sauf que ce second process est excuter par le premier via excelp.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
    int main(int argc, char **argv)
    {
    	pid_t pid;
    	int fd[2];
    	int i =0;
     
    	if( pipe(fd) == -1)
    	{
    		printf("Echec de la creation du pipe\n");
    	}	
     
    	switch(fork())
    	{
    		case -1:
    			printf("Erreur fork\n");
    			exit(-1);
    			break;
    		case 0:
    			execlp("./fenGTK", "./fenGTK", NULL, NULL);
     
    			break;
    		default:
    			printf("Processus Pere\n");
     
    			break;	
    	}
     
     
    	return 0;
    y a rien dans ce code, c'est pour juste pour montrer ce que je veu faire. Je veux faire communiquer le processus pere avec fenGTK.

    Est ce que les tuyeaux sont une bonne idée? si oui comment faire, car je vois pas trop comment obtenir le descripteur du pipe dans fenGTK.
    Ou y a t'il une meilleure solution?

    merci

  2. #2
    Membre éprouvé
    Avatar de granquet
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    1 201
    Détails du profil
    Informations personnelles :
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 201
    Par défaut
    page 17 (clique sur le smiley, au cas ou ce ne soit pas clair !)

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Août 2006
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 79
    Par défaut Pipe (et jacques)
    J'y connais rien en pipe..
    Mais ds mes souvenirs , c'est un peu un fread et un fwrite entre 2 prog...

    Le principe est d'echanger de l'info en continu
    Est ce que tu veux faire ?
    Ou desires tu simplement partager des donnees en memoire entre tes 2 process ?
    Un peu comme si ton premier process envoyait des parametres aux second.
    Si c le cas... Utilise de la memoire partagee.
    Je peux te donner les 4 ou 5 instructions suffisantes

    Bye

  4. #4
    Membre éclairé
    Avatar de Blo0d4x3
    Inscrit en
    Octobre 2003
    Messages
    593
    Détails du profil
    Informations forums :
    Inscription : Octobre 2003
    Messages : 593
    Par défaut
    bon j'ai decider d'utiliser les tuyeaux.
    J'ai fait un petit programme de test, ok tous fonction, mais lorsque je fais ce pipe dans mon vrai programme ca merdouille.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
     
     
    void mafonction()
    {
    //du code, du code
     
    switch(fork())
        {
    	case -1:
    		printf("Erreur fork\n");
    		exit(-1);
    		break;
     
    	case 0:
    		close(pfd[1]);
    		printf("Processus fils\n");
     
    		while (read(pfd[0], buffer2, BUFSIZ) != 0)
    			printf("child reads %s", buffer2);
     
    		fenGTK(NULL, NULL, buffer2);
     
        		close(pfd[0]); /* close the pipe */
     
    		break;
     
    	default:
    		//char buffer[BUFSIZ];
     
    		printf("Processus Pere\n");
    		close(pfd[0]); /* close read side */
     
     
         		strcpy(buffer, "HelloWorld\n");
        		write(pfd[1], buffer, strlen(buffer)+1);
     
     
        		//du code, du code
     
    		close(pfd[2]);	
    		break;
    Il me semble qu'il ne passe jamais dans le pere, et du coup comme rioen n'est jamais ecris dans le pipe la boucle
    while (read(pfd[0], buffer2, BUFSIZ) != 0)
    printf("child reads %s", buffer2);
    tourne sans cesse.

    Comment corriger ca?


    merci

  5. #5
    Membre éprouvé
    Avatar de granquet
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    1 201
    Détails du profil
    Informations personnelles :
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 201
    Par défaut
    peut etre qu'en lisant le manuel ça vas mieux?

    Citation Envoyé par man read
    RETURN VALUE
    On success, the number of bytes read is returned (zero indicates end of
    file), and the file position is advanced by this number. It is not an
    error if this number is smaller than the number of bytes requested;
    this may happen for example because fewer bytes are actually available
    right now (maybe because we were close to end-of-file, or because we
    are reading from a pipe, or from a terminal), or because read() was
    interrupted by a signal. On error, -1 is returned, and errno is set
    appropriately. In this case it is left unspecified whether the file
    position (if any) changes.

Discussions similaires

  1. Creation carte MAP des communes france
    Par sasseur dans le forum ODS et reporting
    Réponses: 7
    Dernier message: 18/02/2014, 19h24
  2. Réponses: 3
    Dernier message: 26/10/2012, 13h58
  3. creation et communication entre widgets
    Par opensource dans le forum GTK+ avec C & C++
    Réponses: 4
    Dernier message: 10/09/2007, 09h59
  4. Creation d'un fichier commun !!
    Par Shandler dans le forum C++
    Réponses: 2
    Dernier message: 24/02/2005, 12h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo