Advertisement
Guest User

Untitled

a guest
Nov 18th, 2019
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.11 KB | None | 0 0
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<unistd.h>
  4. #include<pthread.h>
  5. #include<wait.h>
  6. typedef struct {
  7. pid_t pid;
  8. int c;
  9. int i;
  10.  
  11. }info;
  12.  
  13.  
  14. int N;
  15.  
  16. int ** tube;
  17. void filsprodige(int numfils){
  18.  
  19. for(int i=0; i<N;i++){
  20. if(i==(numfils-1)%N){
  21. close(tube[i][1]);
  22. }
  23.  
  24. else if(i==numfils){
  25. close(tube[i][0]);
  26. }
  27. else{
  28. close(tube[i][0]);
  29. close(tube[i][1]);
  30. }
  31. }
  32. if(numfils==0){
  33. info carlos;
  34. carlos.c=42;
  35. carlos.i=0;
  36. carlos.pid=getpid();
  37. if (write(tube[0][1],&carlos,sizeof(carlos)) < 0) {
  38. perror("write");
  39. exit(1);
  40. }
  41. if (read(tube[N-1][0],&carlos,sizeof(info)) < 0) {
  42. perror("read");
  43. exit(1);
  44. };
  45. puts("coucou");
  46. carlos.i++;
  47. printf(" constante :%d\n compteur %d\n",carlos.c,carlos.i);
  48. }
  49.  
  50. else{
  51. info carlos;
  52. if (read(tube[(numfils-1)%N][0],&carlos,sizeof(info)) < 0) {
  53. perror("read2");
  54. exit(1);
  55. }
  56. carlos.i++;
  57. if (write(tube[numfils][1],&carlos,sizeof(carlos)) < 0) {
  58. perror("write2");
  59. exit(1);
  60. }
  61. printf("Ici le processus %d j'envoie (%d - %d - %d)\n", numfils, carlos.pid, carlos.c, carlos.i);
  62. }
  63. close(tube[(numfils-1)%N][0]);
  64. close(tube[numfils][1]);
  65. exit(0);
  66. }
  67. void ceationFils(int numfils){
  68. switch (fork())
  69. {
  70. case -1:
  71. perror("creationfils : echec");
  72. exit(-2);
  73.  
  74. case 0 :
  75. filsprodige(numfils);
  76.  
  77. default :
  78. break;
  79. }
  80.  
  81. }
  82. int main(int argc, char* argv[]) {
  83. N=atoi(argv[1]);
  84. tube=malloc((N*sizeof(int*)));
  85. for(int i=0;i<N;i++){
  86. tube[i]=malloc(sizeof(int)*2);
  87. if(pipe(tube[i])<0){
  88. perror("erreur création tube");
  89. exit(-1);
  90. }
  91. }
  92. for(int i=0;i<N;i++) ceationFils(i);
  93. for(int i=0;i<N;i++) wait(NULL);
  94. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement