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

Linux Discussion :

Programmation C sur linux


Sujet :

Linux

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2017
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2017
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Programmation C sur linux
    Bonjour

    je cherche la solution a cet exercice SVP! j'ai beau essayé mais sans résultat

    Merci Nom : Sans titre.png
Affichages : 286
Taille : 18,8 Ko

  2. #2
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    17 446
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 17 446
    Points : 43 088
    Points
    43 088
    Par défaut
    Nous ne ferons pas ton travail à ta place.

    Montres-nous ce que tu as fait et dis-nous ce que tu ne comprends pas et nous t'aiderons.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2017
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2017
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Voici le programme !!!

    Code C : 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
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    #include <stdlib.h>
    #include <stdio.h>
    #include <unistd.h>
    #include <sys/types.h>
    #include <string.h>
    #include <signal.h>
    #include <sys/wait.h>
     
    pid_t pid_fils;
    pid_t pid_pere;
    int i=0;
     
    void attenteUSR1(int sig){
            kill(pid_fils, 12);
            printf("Pere --> Fils : 12\n");
            sleep(2);
            kill(pid_fils, 12);
            printf("Pere --> Fils : 12\n");
    }
     
    void attenteUSR2(int sig){
            signal(SIGUSR2,SIG_DFL);
     
     
    }
     
    //-----------------------------------------------------------------Functions-----------------------------------------------------------------------
     
    pid_t nouveau_process(void)
    {
        pid_t pid;
            pid = fork();
        return pid;
    }
     
    void pere(pid_t pid_fils)
    {
     
            while(1){
                    signal(SIGUSR1, attenteUSR1);
            }
    }
     
    void fils(void)
    {
            printf("Fils --> Pere : 10\n");
            kill(getppid(), 10);
                   while(1){
                    signal(SIGUSR2, attenteUSR2);
            }
    }
     
    //-----------------------------------------------------------------Main---------------------------------------------------------------------------
     
    int main(void)
    {
        pid_t pid = nouveau_process();
            pid_fils=pid;
            printf("Pere main : %d\n",pid_pere);
            printf("Fils main : %d\n",pid_fils);
        switch (pid) {
            case -1:
                            return EXIT_FAILURE;
                            break;
                     case 0:
                            pid_fils=getpid();
                            printf("Pere fils : %d\n",pid_pere);
                            printf("Fils fils : %d\n",pid_fils);
                            fils();
                            break;
            default:
                    pid_pere=getpid();
                    printf("Pere pere : %d\n",pid_pere);
                            printf("Fils pere : %d\n",pid_fils);
                            pere(pid);
                            break;
        }
     
        return EXIT_SUCCESS

  4. #4
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    17 446
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 17 446
    Points : 43 088
    Points
    43 088
    Par défaut
    ligne 59, tu imprimes pid_pere alors que la variable n'est pas initialisée.

    D'après ton schéma, tu dois gérer les signaux, je ne vois aucune trace de cela.

    Regardes ça :
    http://mtodorovic.developpez.com/lin...e/?page=page_3
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  5. #5
    Expert éminent Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 035
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 035
    Points : 8 400
    Points
    8 400
    Par défaut
    salut,

    j'ajouterai que ton switch(pid) n'est peut-être pas une bonne idée, à la fin tu peux y perdre en lisibilité

    bon comme ça ça m'exerce, j'avais pas fait de C depuis longtemps :
    Code C : 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
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    #include <unistd.h>
    #include <stdlib.h>
    #include <string.h>
    #include <signal.h>
    #include <sys/types.h>
    #include <sys/wait.h>
     
    #ifdef DEBUG
       #include <stdio.h>
       #define DBG(...)  fprintf(stderr, __VA_ARGS__)
    #else
       #define DBG(...)
    #endif
     
    pid_t pid;
    int sigcount = 0;
     
    void handleSignals (int sig) {
       sigcount++;
       DBG("%s : signal %s reçu\n", (pid)?"PERE":"FILS", (sig==SIGUSR1)?"SIGUSR1":"SIGUSR2");
    }
     
    int main (void) {
       pid = fork();
     
       if (pid < 0) {
          DBG("échec fork()\n, exiting.");
          return -1;
       }
     
       if (pid == 0) {
          /* on est dans le fils */
          DBG("FILS : je suis vivant !\n");
          signal(SIGUSR2, handleSignals);
          DBG("FILS : envoie du signal SIGUSR1 au processus père\n");
          kill(getppid(), SIGUSR1);
          while(sigcount < 2);
          DBG("FILS : les deux signaux ont été reçu, on quitte\n");
       } else {
          /* on est dans le père */
          DBG("PERE : présent !\n");
          signal(SIGUSR1, handleSignals);
          while(sigcount < 1);
          DBG("PERE : envoie du premier signal\n");
          kill(pid, SIGUSR2);
          DBG("PERE : on attend 1sec, le temps que le fils récupère le signal\n");
          sleep(1);
          DBG("PERE : envoie du second signal\n");
          kill(pid, SIGUSR2);
          DBG("PERE : en attente du fils pour quitter\n");
          wait(NULL);
          DBG("PERE : on quitte\n");
       }
       DBG("%s : fin normale du processus\n", (pid)?"PERE":"FILS");
       return 0;
    }

    c'est une façon parmi d'autres de faire, la plus simple

    et le résultat :
    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
    $ gcc -Wall -DDEBUG pouet.c -o pouet && ./pouet
    PERE : présent !
    FILS : je suis vivant !
    FILS : envoie du signal SIGUSR1 au processus père
    PERE : signal SIGUSR1 reçu
    PERE : envoie du premier signal
    PERE : on attend 1sec, le temps que le fils récupère le signal
    FILS : signal SIGUSR2 reçu
    PERE : envoie du second signal
    PERE : en attente du fils pour quitter
    FILS : signal SIGUSR2 reçu
    FILS : les deux signaux ont été reçu, on quitte
    FILS : fin normale du processus
    PERE : on quitte
    PERE : fin normale du processus

Discussions similaires

  1. [GMP]Programme correct sur Linux, pas sur Windows
    Par FoX_*D i E* dans le forum Bibliothèques
    Réponses: 0
    Dernier message: 22/01/2010, 17h26
  2. diffusion de mon programme sur linux et windows
    Par lex13 dans le forum Langage
    Réponses: 23
    Dernier message: 25/08/2007, 12h03
  3. Installation de nouveaux programme sur linux exp(Oracle)
    Par deutsch dans le forum Administration système
    Réponses: 2
    Dernier message: 02/12/2006, 14h14
  4. Programme windos sur linux
    Par kill95 dans le forum Applications et environnements graphiques
    Réponses: 7
    Dernier message: 21/05/2006, 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