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

POSIX C Discussion :

synchronisation processus pere fils


Sujet :

POSIX C

  1. #1
    Membre régulier Avatar de Tex-Twil
    Inscrit en
    Avril 2004
    Messages
    447
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 447
    Points : 122
    Points
    122
    Par défaut synchronisation processus pere fils
    Bonjour,
    j'ai un programme qui se divise ne pere et fils avec un fork. Je veux faire communiquer ces 2 processus avec des tubes: le fils doit envoyer (write) un login et un mot de passe au père à travers un tube. Il y a donc 2 write() dans le tube par le fils et 2 read() par le père. Ma question concerne la syncronisation des deux processus. Dois-je m'en préocuper pour être sûr que le write du fils se fait avant le read du père ou alors le read va bloquer le père tant qu'il le fils n'aura pas écrit qqch dans le tube ?

    merci

  2. #2
    Membre Expert

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Points : 5 724
    Points
    5 724
    Par défaut
    Les tubes sont des mécanismes de synchronisation donc devrait pas avoir de probléme de ce côté la.

    Par contre tu pourrais faire cela avec 1 seul write et 1 seul read en faisant l'effort de structurer tes données.
    " Dis ce que tu veux qui insulte mon honneur car mon silence sera la réponse au mesquin.
    Je ne manque pas de réponse mais : il ne convient pas aux lions de répondre aux chiens ! " [Ash-Shafi'i ]

  3. #3
    Membre expérimenté
    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
    Points : 1 421
    Points
    1 421
    Par défaut
    je pense que c'est ce que hegros voulait dire, mais je le redis:

    le read sur un tube est bloquant.
    donc le pere vas rester bloqué sur le read ...
    click my www
    ............|___
    ...................\
    .................._|_
    ..................\ /
    ..................."

  4. #4
    Membre régulier Avatar de Tex-Twil
    Inscrit en
    Avril 2004
    Messages
    447
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 447
    Points : 122
    Points
    122
    Par défaut
    ok je vois
    Citation Envoyé par hegros
    Par contre tu pourrais faire cela avec 1 seul write et 1 seul read en faisant l'effort de structurer tes données.
    càd ?

  5. #5
    Membre Expert

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Points : 5 724
    Points
    5 724
    Par défaut
    Citation Envoyé par Tex-Twil
    ok je vois


    càd ?

    Tu proposes de faire 2 ecritures soit une pour le nom utilisateur et une pour le mot de passe.(bien que transmettre les mots de passe comme cela parait un peu louche mais bon j'imagine que c'est un exercice de cours)

    Ce que je propose c'est de faire qu'une seule ecriture en définissant un nouveau type qui regrouperait les informations d'un utilisateur.

    Ce qui pourrait donner :


    typedef struct S_Utilisateur {
    char Nom[MAX_NOM];
    char MotPasse[MAX_MDP];
    }

    Il te reste plus qu'a ecrire une structure S_Utilisateur dans le fils (write(...,sizeof(S_Utilisateur),...)et lire une structure S_Utilisateur(read(...,sizeof(S_Utilisateur),...) dans le pére.

    Le probléme avec ta première méthode c'est que ca complique l'affaire puisque les données sont complétement morcelés ce qui n'est pas trés pratique (comment le pére sait ce qu'il y a dans le tube à l'instant t un nom d'utilisateur ou un mot de passe ? )
    " Dis ce que tu veux qui insulte mon honneur car mon silence sera la réponse au mesquin.
    Je ne manque pas de réponse mais : il ne convient pas aux lions de répondre aux chiens ! " [Ash-Shafi'i ]

  6. #6
    Membre régulier Avatar de Tex-Twil
    Inscrit en
    Avril 2004
    Messages
    447
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 447
    Points : 122
    Points
    122
    Par défaut
    oui c'est vrai que je pourrais écrire la structure en 1x.

    Citation Envoyé par hegros
    bien que transmettre les mots de passe comme cela parait un peu louche mais bon j'imagine que c'est un exercice de cours)
    Pourquoi ça te parait louche ? Ce n'est pas un exercice de cours mais un projet à la fac qui doit être fait sérieusement.

    J'explique un peu:
    On doit faire une communication sécurisé entre un serveur et un client. Le client se connecte donc au serveur qui crée immédiatement un processus fils avec des droits minimaux pour éviter que le client communique avec un processus qui a des droits de root. Le processus fils reçoit le login & mdp du client et les envoie à son père à travers ces tubes. Le père fait l'authentification du l'utilisateur avec PAM par exemple. et donne donne le résultat de l'authentificatin à son fils. Si c'est ok,le fils se tue et le père prends le droits (uid guid ...) de l'utilisateur en question et c'est ce processus qui va executer le commandes envoyées par le client.

    Je sais, tel que c'est décrit ici, c'est un solution single user. Pour plusieurs client, il faudrait ajouter un père (grand père ?) au dessus de tout ça qui ne fait qu'accepter les connexion socket.

  7. #7
    Membre régulier Avatar de Tex-Twil
    Inscrit en
    Avril 2004
    Messages
    447
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 447
    Points : 122
    Points
    122
    Par défaut
    des avis ?

Discussions similaires

  1. Communication entre deux processus pere-fils bloquante
    Par joffrey575 dans le forum Unix
    Réponses: 0
    Dernier message: 13/04/2015, 21h39
  2. Communication processus pere/fils
    Par Super_carotte dans le forum Langage
    Réponses: 2
    Dernier message: 14/01/2012, 12h41
  3. Réponses: 3
    Dernier message: 15/01/2010, 15h49
  4. pere/fils
    Par innosang dans le forum C
    Réponses: 10
    Dernier message: 15/03/2006, 21h58
  5. modeliser relation pere fil
    Par flawer dans le forum Débuter
    Réponses: 20
    Dernier message: 12/12/2005, 12h59

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