Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1274 connectés 

  FORUM HardWare.fr
  Programmation
  C

  Programmatuon C sous Linux

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Programmatuon C sous Linux

n°692022
_Faust_
Burn-out général
Posté le 03-04-2004 à 23:48:37  profilanswer
 

Bonjour,
 
On me demande d'écrire un petit programme comme suit:
 
Écrire un programme C qui crée deux processus à l'aide de l'appel système fork(). Le père affichera les entiers pairs compris entre 1 et 100, le fils affichera les entiers impairs compris dans le même intervalle. Synchroniser les processus à l'aide des signaux pour que l'affichage soit 1 2 3 ... 100.
 
Bon,ce que j'ai écrit fait exactement ce qui est demandé, sauf au niveaux des signaux. Il y a une raison particulière pour synchroniser avec des signaux? Comme je suis pas très bon en C, peut-être que mon programme n'est pas optimal...

Code :
  1. #include <stdio.h>
  2. main()
  3. {
  4.         int pid, i ;
  5.         pid=fork() ;
  6.         if (pid != 0)
  7.         {
  8.                 for (i=0; i<=100; i++)
  9.                 {
  10.                         if (i%2==0)
  11.                         printf("\n je suis le processus pere %d", i);
  12.                        sleep(1) ;
  13.                 }
  14.         }
  15.         if (pid == 0)
  16.         {
  17.                 for (i=0; i<=100; i++)
  18.                 {
  19.                         if (i%2!=0)
  20.                         printf("\n je suis le processus fils %d", i);
  21.                         sleep(1) ;
  22.                 }
  23.         }
  24. }

mood
Publicité
Posté le 03-04-2004 à 23:48:37  profilanswer
 

n°692027
R3g
fonctionnaire certifié ITIL
Posté le 04-04-2004 à 00:09:21  profilanswer
 

_Faust_ a écrit :

Bonjour,
 
On me demande d'écrire un petit programme comme suit:
 
Écrire un programme C qui crée deux processus à l'aide de l'appel système fork(). Le père affichera les entiers pairs compris entre 1 et 100, le fils affichera les entiers impairs compris dans le même intervalle. Synchroniser les processus à l'aide des signaux pour que l'affichage soit 1 2 3 ... 100.
 
Bon,ce que j'ai écrit fait exactement ce qui est demandé, sauf au niveaux des signaux. Il y a une raison particulière pour synchroniser avec des signaux? Comme je suis pas très bon en C, peut-être que mon programme n'est pas optimal...

Code :
  1. #include <stdio.h>
  2. main()
  3. {
  4.         int pid, i ;
  5.         pid=fork() ;
  6.         if (pid != 0)
  7.         {
  8.                 for (i=0; i<=100; i++)
  9.                 {
  10.                         if (i%2==0)
  11.                         printf("\n je suis le processus pere %d", i);
  12.                        sleep(1) ;
  13.                 }
  14.         }
  15.         if (pid == 0)
  16.         {
  17.                 for (i=0; i<=100; i++)
  18.                 {
  19.                         if (i%2!=0)
  20.                         printf("\n je suis le processus fils %d", i);
  21.                         sleep(1) ;
  22.                 }
  23.         }
  24. }



1) pour les boucles, tu peux faire for (i=0; i <= 100; i+=2) par exemple. c'est un détail.
 
2) oui, la synchronization est nécessaire : il faut bien comprendre que les deux processus créés sont indépendants après le fork(). Tu n'as aucune garantie que l'affichage se fera dans l'ordre là. remplace sleep(1) par sleep(100) dans un des deux cas et tu vas comprendre.. Donc il faut que chaque processus, après un tour de boucle, signale à l'autre qu'il peut faire son tour suivant et ainsi de suite...


---------------
Au royaume des sourds, les borgnes sont sourds.
n°692029
_Faust_
Burn-out général
Posté le 04-04-2004 à 00:17:32  profilanswer
 

Ah, d'accord je vois...
 
C'est bien compliqué mettre des signaux? Je regarde dans mes notes et les exemples et je saisi pas bien son fonctionnement et son application...
 
Je peux rester avec le même programme ou a cause des signaux faut que je m'y prenne d'une autre façon?

n°692030
R3g
fonctionnaire certifié ITIL
Posté le 04-04-2004 à 00:21:51  profilanswer
 

_Faust_ a écrit :

Ah, d'accord je vois...
 
C'est bien compliqué mettre des signaux? Je regarde dans mes notes et les exemples et je saisi pas bien son fonctionnement et son application...
 
Je peux rester avec le même programme ou a cause des signaux faut que je m'y prenne d'une autre façon?

les signaux de souvenir c'est pas bien compliqué mais je suis pas expert. La base de ton programme est bonne, il faut juste que tu ajoutes un système pour n'incrémenter i que quand l'autre process a envoyé un signal comme quoi tu peux y aller.


---------------
Au royaume des sourds, les borgnes sont sourds.
n°692044
matafan
Posté le 04-04-2004 à 02:04:41  profilanswer
 

Moi j'aurais fait ça avec des sémaphores plutôt que des signaux (oui je sais, ça ne t'aide pas beaucoup).

n°692045
_Faust_
Burn-out général
Posté le 04-04-2004 à 02:09:53  profilanswer
 

Je crois que j'ai trouvé comment faire...je vais poster mon résultat une fois terminé...


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  Programmatuon C sous Linux

 

Sujets relatifs
Xlib sous Linux ???[shell sous linux] besoin d'aide ...
opengl/linux : ATI et NVIDIA : le mystere de glXGetProcAddressErreur lors du déploiement sur serveur Linux
php connexion windows linuxse connecter à un as400 depuis linux
graphismes sous linuxComment faire un démon sous Linux/unix?
Que me manque t il pour pouvoir compiler ? (C++, Linux)Passage sous linux : j arrive meme pas a compiler un hello world :/
Plus de sujets relatifs à : Programmatuon C sous Linux


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR