Bonjour
voila j'ai un petit problème de programmation en C sous Unix...
en effet, le prof de cours nous a donné la correction d'un exercice qui demandait d'afficher toutes les nombres de 1 à 100 de sorte que le fils affiche les nombres imapirs et le père affiche les nombres pairs.
J'ai fait un essai qui n'a pas marché d'abord :: le voici ::
Code :
- #include<unistd.h>
- #include<stdio.h>
- #include<stdlib.h>
- #include<sys/types.h>
- #include<sys/wait.h>
- #include<signal.h>
- #include<errno.h>
- int main()
- {
- int i;
- pid_t pid;
- switch(pid=fork())
- {
- case -1:
- perror("error:pas de creation de processus" );
- break;
- case 0:
- /*ds le processus fils */
- pid=getppid();
- for(i=1;i<100;i=i+2)
- {
- printf("le fils imprime %i\n",i);
- kill(pid,SIGUSR1);
- printf("le fils en pause\n" );
- pause();
- }
- break;
- default:
- /*ds le père */
- for(i=2;i<100;i=i+2)
- {
- printf("le père en pause\n" );
- pause();
- printf("le père imprime %i\n",i);
- kill(pid,SIGUSR1);
- }
- }
- return 0;
- }
|
et après le professeur nous a donné la correction qui ne me semblait pas différente de ma solution.Sa solution marche mais la mienne non ::
voici la solution du prof ::
Code :
- #include <stdio.h>
- #include <stdlib.h>
- #include <sys/types.h>
- #include <signal.h>
- #include <unistd.h>
- int flag = 1;
- void handler(int sig) {flag = 0;}
- int main(void)
- { pid_t pid;
- int i;
- if (signal(SIGUSR1, handler) == SIG_ERR)
- { perror("signal" ); exit(1);
- }
- if ((pid = fork()) == -1)
- { perror("fork" ); exit(1);
- }
- if (pid == 0)
- { /* fils */
- pid = getppid();
- for (i = 1; i <= 100; i += 2)
- { printf("%d\n", i);
- kill(pid, SIGUSR1);
- if (flag) pause();
- flag = 1;
- }
- }
- else
- { /* père */
- for (i = 2; i <= 100; i += 2)
- { if (flag) pause();
- flag = 1;
- printf("%d\n", i);
- kill(pid, SIGUSR1);
- }
- }
- return 0;
- }
|
=> je voudrais juste savoir quelle est la différence et pourquoi la mienne n'a pas marché et celle du prof a marché,
merci