Programmatuon C sous Linux

Programmatuon C sous Linux - C - Programmation

Marsh Posté le 03-04-2004 à 23:48:37    

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. }

Reply

Marsh Posté le 03-04-2004 à 23:48:37   

Reply

Marsh Posté le 04-04-2004 à 00:09:21    

_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.
Reply

Marsh Posté le 04-04-2004 à 00:17:32    

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?

Reply

Marsh Posté le 04-04-2004 à 00:21:51    

_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.
Reply

Marsh Posté le 04-04-2004 à 02:04:41    

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

Reply

Marsh Posté le 04-04-2004 à 02:09:53    

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

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed