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 :

Problème avec le PID


Sujet :

C

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Responsable de trafic
    Inscrit en
    Avril 2016
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Bahamas

    Informations professionnelles :
    Activité : Responsable de trafic
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2016
    Messages : 12
    Points : 1
    Points
    1
    Par défaut Problème avec le PID
    salut la communauté j'ai trouvé un algorithme sur le net et j'ai essayé de le compiler avec la commande "gcc" mais ce dernier affiche un message d'erreur .

    Pouvez vous m'aider les gars ?

    voici l’énoncé :

    Écrire deux programmes qui bouclent et qui affichent les messages « ping » et « pong » respectivement lorsqu'ils recoivent un signal à définir. La synchronisation entre les processus correspondants aux deux programmes (pour afficher de manière alternative les messages « ping » et « pong ») est assurée par un troisième processus : l'ordonnanceur.

    On lancera trois terminaux, puis on exécutera dans deux d'entre eux les programmes « ping » et « pong » et dans le troisième terminal l'ordonnanceur, avec comme argument les pid des deux processus maintenant en attente.

    voici le 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
    25
    26
    #include ‹stdio.h›
    #includesignal.h›
    #include ‹unistd.h›
     
    void interrupt(int s)
    {
      printf("Ping\n");
      signal(s,interrupt);
    }
     
    int main()
    {
      // Pour des raisons pratiques...
      printf("Mon PID est : %d\n",getpid());
     
      signal(SIGUSR1,interrupt);
     
     
      // Boucle infinie :
      while(1) 
        {
          pause();
        }
     
      return 0;
    }

    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
    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
    #include ‹stdio.h›
    #includesignal.h›
    #include ‹stdlib.h›
    #include ‹unistd.h›
     
    // Numero de processus actuel, et pid correspondants :
    int procactuel,pid1,pid2;
     
    // Donne la main aux processsus l'un apres l'autre :
    void swap(int s)
    {
      if(procactuel==0)
        {
          printf("Main au processus 2\n");
          kill(pid2,SIGUSR1);
          procactuel=1;
        }
      else
        {
          printf("Main au processus 1\n");
          kill(pid1,SIGUSR1);
          procactuel=0;
        }
     
      // Reprise :
      alarm(1);
      signal(s,swap);
    }
     
     
    void detruit(int s)
    {
      // L'ordonnanceur entraine dans sa chute les deux
      // processus fils :
      kill(pid1,SIGINT);
      kill(pid2,SIGINT);
      int mypid=getpid();
      alarm(0);
      kill(mypid,SIGKILL);
    }
     
     
    void usage(char *nomcommande)
    {
      printf("Usage : %s ‹pid1› ‹pid2›\n",nomcommande);
      printf("Execute de maniere alternative ‹pid1› et ‹pid2›.\n");
      exit(EXIT_FAILURE);
    }
     
     
    int main(int argc, char * argv[])
    {
      if (argc!=3)
        usage(argv[0]);
     
      // Recuperation des parametres :
      pid1=atoi(argv[1]);
      pid2=atoi(argv[2]);
     
      // Verification des deux pid :
      if(pid1#139;=0 || pid2#139;=0)
        usage(argv[0]);
     
      // Declaration des fonctions de traitement d'interruption :
      signal(SIGALRM,swap);
      signal(SIGINT,detruit);
     
      // Initialisation :
      printf("Pressez CTRL-C pour quitter !\n");
      printf("Mini-ordonnanceur pret.\n");
      procactuel=0;
      kill(pid1,SIGUSR1);
      alarm(1);
     
      // Boucle infinie :
      while(1) {pause();}
      return 0;
    }

    cette partie pose un problème :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     // Verification des deux pid :
      if(pid1#139;=0 || pid2#139;=0)

  2. #2
    Expert éminent
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 565
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 565
    Points : 7 648
    Points
    7 648
    Par défaut
    Bonjour,

    ta copie a foiré.
    * Apprends le langage C.
    * remplace #139; par un !

  3. #3
    Membre habitué Avatar de Abacar94
    Homme Profil pro
    L2 Math-informatique
    Inscrit en
    Novembre 2015
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Niger

    Informations professionnelles :
    Activité : L2 Math-informatique

    Informations forums :
    Inscription : Novembre 2015
    Messages : 103
    Points : 133
    Points
    133
    Par défaut
    Il suffit de remplacer ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    // Vérification des deux PID :
    if(pid1#139;=0 || pid2#139;=0)
    par ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    // Vérification des deux PID :
    if(pid1!=0 || pid2!=0)

  4. #4
    Nouveau Candidat au Club
    Homme Profil pro
    Responsable de trafic
    Inscrit en
    Avril 2016
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Bahamas

    Informations professionnelles :
    Activité : Responsable de trafic
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2016
    Messages : 12
    Points : 1
    Points
    1
    Par défaut
    merci beaucoup les gars mais je n'arrive pas à le lancer . Pourtant j'ai ouvert trois terminal et pourtant je fais
    ./main 3145 3256

  5. #5
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2015
    Messages
    644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2015
    Messages : 644
    Points : 1 509
    Points
    1 509
    Par défaut
    Je pense sincèrement qu'avant d'aller plus loin, tu devrais penser un peu à ce que ton code fait plutôt que de pomper du code comme ça.

    L'erreur qu'ils t'ont résolu plus haut, n'a pas lieu d'être sur un forum.

    Pour la suite, sans erreur, valgrind ou autre, difficile de t'en dire plus.


    EDIT : Tu compiles comment? Tu as deux mains. J'espère pour toi au moins que tu ne donnes pas à tes exécutables le même nom
    Un fait toujours plaisir et encourage à l'entraide. Un n'est pas à négliger, pensez aux autres !

    Que la force soit avec Developpez.net
    Je ne suis pas un crack en informatique, loin de là, mais il n'y a pas que les mécaniciens qui sachent conduire une voiture

  6. #6
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par magicarpe44 Voir le message
    EDIT : Je confirme mes deux lignes plus haut, tu ne sais absolument pas ce que tu fais. Tu lances un ./main [arg] [arg] alors que le prototype de ta fonction main() ne prend aucun argument.
    Tu te trompes. Le deuxième programme montré prends bien en paramètre deux arguments.


    Sinon, je plussoie.. Au lieu de pomper un code tout fait d'internet, as-tu lu un minimum de théorie sur le sujet ? Comprends-tu ce que les codes font et comment faut-il les utiliser ?

    ( pour un surplus de théorie sur le sujet : http://mtodorovic.developpez.com/lin...e/?page=page_3 )

  7. #7
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2015
    Messages
    644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2015
    Messages : 644
    Points : 1 509
    Points
    1 509
    Par défaut
    J'ai update il y à 15 minutes oui, mais quand j'ai vu ça j'ai fais un bond au plafond et me suis dit que ça servait à rien de lire la suite... Shame on me.

    Mais je te plussoie en retour, le problème n'est pas là je pense
    Un fait toujours plaisir et encourage à l'entraide. Un n'est pas à négliger, pensez aux autres !

    Que la force soit avec Developpez.net
    Je ne suis pas un crack en informatique, loin de là, mais il n'y a pas que les mécaniciens qui sachent conduire une voiture

  8. #8
    Nouveau Candidat au Club
    Homme Profil pro
    Responsable de trafic
    Inscrit en
    Avril 2016
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Bahamas

    Informations professionnelles :
    Activité : Responsable de trafic
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2016
    Messages : 12
    Points : 1
    Points
    1
    Par défaut
    Premièrement : je pompe ce que je veux sur internet étant donné que c'est gratuit, l'information est là donc je lis puis je teste .

    Deuxièmement : je l'ai compilateur avec le Terminal "gcc main.c -o main "

    dernièrement : avez vous tester de le lancer avant de faire la police du net ou des codes?

  9. #9
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2015
    Messages
    644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2015
    Messages : 644
    Points : 1 509
    Points
    1 509
    Par défaut
    Vu comme ça, pour ma part, tu peux clairement aller demander à ton ami google, qui te parle mais comme tu comprends rien, je te souhaite bien du courage !

    Petite morale :
    - Quand on pompe du code qu'on comprend pas, la moindre des choses c'est au moins d'être courtois avec ceux qui essaient de t'aider.
    - Quand on pompe du code qui n'est pas le sien, on ne se plaint pas de ne rien y comprendre et de demander aux autres de faire le boulot.

    Dernièrement, je n'ai (pour ma part encore une fois) pas forcément besoin de le lancer pour COMPRENDRE ce que fais ton code. Ayant déjà fait cet exercice auparavant qui plus est.

    La "police du net" te salue bien cordialement
    Un fait toujours plaisir et encourage à l'entraide. Un n'est pas à négliger, pensez aux autres !

    Que la force soit avec Developpez.net
    Je ne suis pas un crack en informatique, loin de là, mais il n'y a pas que les mécaniciens qui sachent conduire une voiture

  10. #10
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par guwop Voir le message
    Premièrement : je pompe ce que je veux sur internet étant donné que c'est gratuit, l'information est là donc je lis puis je teste .
    Certainement, mais ma question tiens toujours : Comprends-tu ce que font ses codes avant même de les exécuter ? As-tu lu un minimum de théorie pour comprendre ce qu'ils sont censé faire ? As-tu compris comment tu dois utiliser ses deux programmes ensemble pour que cela fonctionne ?

    Tu pompes ce que tu veux, ça ne regarde que toi. Mais faut au moins ça intelligemment pour que cela t'aide à avancer, au moins dans tes connaissances.

    Deuxièmement : je l'ai compilateur avec le Terminal "gcc main.c -o main "
    As-tu compilé les deux programme ? N'as-tu eu aucun warning en les compilant ?
    Les as-tu lancé séparément ? As-tu compris, encore une fois, comment sont-ils censé s'articuler ensemble ?

    dernièrement : avez vous tester de le lancer avant de faire la police du net ou des codes?
    Point de police, juste une vue sur ce que tu nous demandes.
    Tu ne maitrises pas un code, que tu nous dit avoir pris d'internet. Tu nous demandes des corrections pourtant "évidente", si tu as un minimum de connaissance dans un quelconque langage de programmation.

    Nous n'avons pas besoin de "tester de le lancer" pour faire la police, justement. Justement car l'on prends la peine de lire chaque ligne, et d'en comprendre les concepts sous-jacents.


    Je finirai par dire qu'être agressif avec ceux qui veulent te venir en aide n'est pas forcément une bonne idée. On t'a simplement posé une question ou deux sur ton niveau de compétence et de compréhension sur le code que tu nous montres. On n'est pas la pour faire un quelconque boulot à ta place, mais on peut plus facilement t'aider si tu nous dis/montre sur ce que tu bloques, sur ce qui te bloques.
    Te donner la réponse tel quel dans la bouche ne te fera pas plus avancer que de continuer à prendre des codes "pompé" sur le net sans n'en comprendre les tenants et aboutissant.

    Comme dit l'adage : "Donne un poisson à un homme, il mangera un jour. Apprends lui à pêcher, il mangera tout les jours."
    Dernière modification par Invité ; 07/06/2016 à 16h21.

  11. #11
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    Concernant pomper + compiler + executer sans comprendre.
    Tu connais les virus?

    Ca pourrait être marrant...
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  12. #12
    Nouveau Candidat au Club
    Homme Profil pro
    Responsable de trafic
    Inscrit en
    Avril 2016
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Bahamas

    Informations professionnelles :
    Activité : Responsable de trafic
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2016
    Messages : 12
    Points : 1
    Points
    1
    Par défaut
    Certainement, mais ma question tiens toujours : Comprends-tu ce que font ses codes avant même de les exécuter ? As-tu lu un minimum de théorie pour comprendre ce qu'ils sont censé faire ? As-tu compris comment tu dois utiliser ses deux programmes ensemble pour que cela fonctionne ?

    Tu pompes ce que tu veux, ça ne regarde que toi. Mais faut au moins ça intelligemment pour que cela t'aide à avancer, au moins dans tes connaissances.
    Salut ,isNAN le soucis est toujours les mêmes sur les forums , quelqu'un vient demande quelque chose de précis (une question) et il y a toujours des personnes qui viennent de traiter de Voleur de code ou de fainéant ,Mais Pourquoi?? je ne comprends pas car sur "developpez.net" qui est le meilleur site francophone sur le sujet il y a des cours et des codes aussi. c'est comme si j'avais un code sur "delveloppez.net"et que je l'avais tester et que pour x ou z raison ça se lance pas et j'ouvre un topic pour demander de l'aide .

    Je n'ai pas chercher à être "agressif" Sinon pour répondre à ta question :OUI le fait de lire un code puis de le tester m'aide beaucoup à avancer .


    As-tu compilé les deux programme ? N'as-tu eu aucun warning en les compilant ?
    Les as-tu lancé séparément ? As-tu compris, encore une fois, comment sont-ils censé s'articuler ensemble ?
    J'ai lancer compiler les deux programmes séparément , aucun warning (je rappel que je suis sur ubuntu avec le terminal , aucun soucis) puis j'ai ouvert trois terminaux en tout j'ai lancé le premier programme sur 2 terminaux qui m'ont afficher chacun un pid (donc j'avais deux PID en tout)
    puis je lance le "main" sur le 3eme terminal avec la commande suivante ./main PID1 PID2 et puis l'a j'ai le message "Usage : %s ‹pid1› ‹pid2›\n" capres avoir executer la ligne mais je ne comprends pas car j'ai bien entrer les 2 PIDs en cours.

    Point de police, juste une vue sur ce que tu nous demandes.
    Tu ne maitrises pas un code, que tu nous dit avoir pris d'internet. Tu nous demandes des corrections pourtant "évidente", si tu as un minimum de connaissance dans un quelconque langage de programmation.
    Oui j'avoue que la correction était évidente, si tu remarque bien j'ai vu qu'il y avait un problème à cette ligne puis lorsque "dlafab" je le remercie encore d'ailleurs à trouver le problème je me suis trouvé con , mais je n'ai pas une raison pour me traiter comme quelqu'un qui ni connais rien en langage C et un voleur de code, je n'ai pas aimé ça.

    Je prends l'a peine de te répondre car je vois bien que tu essais de m'aider et en même temps de me faire comprendre que mon comportement n'était pas approprié.

  13. #13
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2015
    Messages
    644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2015
    Messages : 644
    Points : 1 509
    Points
    1 509
    Par défaut
    Pour ma part, loin de là l'idée de te traiter de "voleur" comme tu dis.

    La chose étant est que tous ici, on essaie de t'aider. Et c'est pas en étant agressif avec nous que ça marchera.

    Il parait normal de faire remarquer certaines choses quit à remettre ton apprentissage en cause, et ce n'est pas forcément péjoratif. On à tous, un moment ou un autre prit un code qui n'était pas le notre, ça fait plus ou moins partie de l'apprentissage.

    Il y à juste l'art et la manière dans ce cas-là de demander les choses

    Néanmoins, bon courage !
    Un fait toujours plaisir et encourage à l'entraide. Un n'est pas à négliger, pensez aux autres !

    Que la force soit avec Developpez.net
    Je ne suis pas un crack en informatique, loin de là, mais il n'y a pas que les mécaniciens qui sachent conduire une voiture

  14. #14
    Nouveau Candidat au Club
    Homme Profil pro
    Responsable de trafic
    Inscrit en
    Avril 2016
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Bahamas

    Informations professionnelles :
    Activité : Responsable de trafic
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2016
    Messages : 12
    Points : 1
    Points
    1
    Par défaut
    Merci à tous j'ai résolu mon problème tout seul comme d’habitude

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

Discussions similaires

  1. VC++ Direct3D8, problème avec LPD3DXFONT et LPD3DTEXTURE8
    Par Magus (Dave) dans le forum DirectX
    Réponses: 3
    Dernier message: 03/08/2002, 11h10
  2. Problème avec [b]struct[/b]
    Par Bouziane Abderraouf dans le forum CORBA
    Réponses: 2
    Dernier message: 17/07/2002, 10h25
  3. Problème avec le type 'Corba::Any_out'
    Par Steven dans le forum CORBA
    Réponses: 2
    Dernier message: 14/07/2002, 18h48
  4. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10

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