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 :

Pipe entre deux processus inconnus ?


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2015
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2015
    Messages : 13
    Par défaut Pipe entre deux processus inconnus ?
    Bonjour,

    Je rencontre un petit problème avec les Pipes...

    Est-ce possible de faire communiquer 2 processus qui ne ce connaissent pas avec un Pipe ?

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 487
    Par défaut
    Bonjour,

    Oui, c'est possible avec un « tube nommé » (named pipe), en tout cas sous Unix (ou Linux), car s'ils existent également sous Windows, leur sémantique est légèrement différente. L'idée est justement de définir un point de rencontre pour ces deux processus qui ne se connaissent pas encore et cela se fait, comme traditionnellement sous Unix, via le système de fichiers.

    Ouvre deux terminaux côte à côte sur ton écran et assure-toi d'être dans le même répertoire des deux côtés, puis crée le tube dans le premier avec :

    Code Shell : Sélectionner tout - Visualiser dans une fenêtre à part
    $ mknod montube p

    … avec « p » pour « pipe », ou plus simplement :


    … puis depuis l'autre terminal, saisis ceci :

    Code Shell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ ls -l montube
    prw-rw-r-- 1 user user 0 16 juin  16:05 montube

    Le « p » initial indique qu'il s'agit bien d'un tube nommé et pas d'un fichier ordinaire.
    De là, tape ce qui suit dans le premier terminal :

    Code Shell : Sélectionner tout - Visualiser dans une fenêtre à part
    $ echo Bonjour > montube

    … puis ceci dans le second :

    Code Shell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ cat montube
    Bonjour

    On voit alors que ce qui a été écrit dans le premier tube a mis le premier processus en attente et que le second a pu lire ce qui avait été envoyé par le premier, en suivant exactement le même mécanisme que si tu avais créé un tube anonyme avec pipe(). Au point de vue de la programmation C, il s'agit de fichiers ordinaires que tu peux ouvrir normalement avec open() ou fopen(). Le programme n'aura alors même pas conscience qu'il s'agit de tubes.

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2015
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2015
    Messages : 13
    Par défaut
    Merci beaucoup !!

    exactement ce que je cherche !

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2015
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2015
    Messages : 13
    Par défaut Tube nommé sous windows ?
    Bonjour,

    J'essaye de mettre en place un tube nommé sous Windows en C.
    voila mon code :

    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
     
     
    #include <sys/stat.h>
    #include <sys/types.h>
    #include "io.h"
    #include <process.h>
    #include <stdio.h>
     
     
    int main(int argc, const char* argv[]) {
     
    	int fd;
    	char * myfifo = "./myfifo";
     
    	/* create the FIFO (named pipe) */
    	int status = mkfifo(myfifo, 1);
     
    	/* write "Hi" to the FIFO */
    	fd = open(myfifo, O_WRONLY);
    	write(fd, "Hi", sizeof("Hi"));
    	close(fd);
     
    	/* remove the FIFO */
    	unlink(myfifo);
    mon problème est le suivant : mkfifo n'est pas définis ... j'ai essayer d'ajouter des includes mais rien ne fonctionne...

    quelqu'un aurai une solution pour moi svp ?!

  5. #5
    Membre expérimenté
    Avatar de ChipsAlaMenthe
    Homme Profil pro
    Ingénieur en eau chaude et ballon rond
    Inscrit en
    Mai 2015
    Messages
    138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Ingénieur en eau chaude et ballon rond
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mai 2015
    Messages : 138
    Par défaut
    Est-ce que tu as bien redéfini/ajouté le PATH? Ca pourrait être une des raisons pour lesquels il ne trouve pas mkfifo ^^

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2015
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2015
    Messages : 13
    Par défaut
    non pas du tout :o ! il faut ajouter un PATH ?

  7. #7
    Membre expérimenté
    Avatar de ChipsAlaMenthe
    Homme Profil pro
    Ingénieur en eau chaude et ballon rond
    Inscrit en
    Mai 2015
    Messages
    138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Ingénieur en eau chaude et ballon rond
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mai 2015
    Messages : 138
    Par défaut
    Je ne suis pas sûr, mais étant donné que tu programmes sous Windows, il y a de grandes chances pour que ce soit la raison du problème.
    Essaie peut être dans un premier temps d'inclure le nom absolu de ton fichier stat.h, et ensuite si ça fonctionne rajoute un PATH, ce sera plus générique .

  8. #8
    Membre expérimenté
    Avatar de ChipsAlaMenthe
    Homme Profil pro
    Ingénieur en eau chaude et ballon rond
    Inscrit en
    Mai 2015
    Messages
    138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Ingénieur en eau chaude et ballon rond
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mai 2015
    Messages : 138
    Par défaut
    Et si jamais ça ne marche toujours pas, regarde j'ai trouvé ce lien:

    https://en.wikipedia.org/wiki/Named_pipe

    Ca explique les tubes nommés sous Unix et sous Windows ^^

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Communication par pipe entre deux processus
    Par mohamedz dans le forum POSIX
    Réponses: 9
    Dernier message: 02/03/2010, 17h50
  2. redirection d'entrées/sorties entre deux processus
    Par sunmat dans le forum Bibliothèque standard
    Réponses: 1
    Dernier message: 16/11/2008, 15h35
  3. Echange de signaux entre deux processus
    Par makastreet dans le forum Linux
    Réponses: 1
    Dernier message: 25/04/2008, 22h38
  4. Transférer un tableau entre deux processus
    Par piziwate dans le forum Réseau
    Réponses: 10
    Dernier message: 12/12/2007, 15h11
  5. Redirection entrée standard entre deux processus
    Par mverhaeghe dans le forum POSIX
    Réponses: 5
    Dernier message: 08/04/2007, 16h55

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