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 :

Demande de confirmation sur la programmation systeme


Sujet :

POSIX C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 130
    Par défaut Demande de confirmation sur la programmation systeme
    Bonjour, je dois faire un projet de système en langage C sur les sémaphores, mon problème est que j'ai 2 processus : un lecteur et un écrivain.
    Ma question est la suivante :
    faut-il bien 1 fork pour chaque processus donc un fork contenant le processus lecteur et un autre comprenant le processus ecrivain ?

    Ce qui me donnerai ceci :
    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
     
    if ((n=fork())==-1)
    {
    	perror("erreur fork");
    	exit(1);
    }
    else
    {
    	if (n==0)
    	{
    		//ici juste le processus fils ecrivain
    	}
    	else
    	{
    		//ici le père mais a quoi sert-il ???
    	}
    }
     
    if ((n2=fork())==-1)
    {
    	perror("erreur fork");
    	exit(1);
    }
    else
    {
    	if (n==0)
    	{
    		//ici juste le processu fils lecteur
    	}
    	else
    	{
    		//ici le père mais a quoi sert-il ???
    	}
    }
    Comme j'ai mis en commentaire : a quoi sert/peut servir le processus père ? et à la fin du processus fils je présume qu'il faut un exit pour terminer le processus fils, est correcte ?

    donc un résumé des questions :
    • Faut-il bien 1 fork pour chaque processus donc un fork contenant le processus lecteur et un autre comprenant le processus écrivain ?
    • A quoi sert/peut servir le processus père ? parce que du coup je ne vois pas trop son but
    • Faut-il un exit pour terminer le processus fils ?
    • Et bien sûr est ce que mon raisonnement est juste du point de vue agencement des processus ?

  2. #2
    Membre Expert Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Par défaut
    à la suite d'un fork(), tu as 2 processus donc inutile de faire 2 fork(). Les 2 processus exécutent le même code, la seule chose qui les différentie est le retour de fork(), 0 dans le cas du fils, et le pid du fils dans le cas du père ou -1 en cas d'erreur.

  3. #3
    Membre extrêmement actif

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

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

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    n = fork();
     
    switch(n)
    {
    case -1 : perror("echec fork"); break;
    case 0 : //ici le code de l'écrivain typiquement des fwrite
    break;
    case 1 : //ici le code du lecteur typiquement des fread
    break;
     
    }

    Le code du lecteur et écrivain peut être écrit dans d'autres fichiers .c du coup on utilise les fonctions excelp etc plutot que d'écrire tout le code à la sauvage dans le case d'un switch.

    Après le fork tu as 2 processus concurrent qui s'executent à partir de la ligne qui suit c'est à dire que les 2 executent le switch en fonction de n soit le process ira executer le code du lecteur ou alors de l'écrivain

  4. #4
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 515
    Par défaut
    On peut tout à fait mettre le code de l'ecrivain et du lecteur dans deux fichiers .c différents, sans pour autant faire d'exec.

    Aussi dans ton switch tu voulais dire "default", pas "case 1". Dans le père, fork retourne le pid du fils, pas 1. D'ailleurs il vaut mieux faire des if qu'un switch, puisque rien ne garentit qu'un pid_t tient dans un int.

  5. #5
    Membre Expert Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Par défaut
    Citation Envoyé par matafan Voir le message
    D'ailleurs il vaut mieux faire des if qu'un switch, puisque rien ne garentit qu'un pid_t tient dans un int.
    je ne vois pas le rapport entre l'instruction switch et le type int?!!

  6. #6
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 515
    Par défaut
    Je me basais sur ça :
    6.8.4.2 The switch statement
    Constraints
    The controlling expression of a switch statement shall have integer type.
    Mais effectivement "integer" ne veux pas dire "int"

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

Discussions similaires

  1. suppression de la demande de confirmation sur xcopy
    Par Thomf dans le forum Scripts/Batch
    Réponses: 4
    Dernier message: 12/03/2010, 15h01
  2. Réponses: 7
    Dernier message: 20/11/2007, 13h34
  3. [VB6] Demande d'aide sur un programme !
    Par Lucas42 dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 16/06/2006, 11h49
  4. [Jboss][EJB]Demande de confirmation sur la structure.
    Par swirtel dans le forum Wildfly/JBoss
    Réponses: 2
    Dernier message: 17/02/2005, 12h30

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