Advertisement
Guest User

p2

a guest
May 22nd, 2018
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.18 KB | None | 0 0
  1. /*******************************************************************************************************
  2. Enunt a doua problema:
  3.  
  4. Programul de mai jos contine doua greseli sintactice (errors si/sau warnings detectabile la compilare) si o greseala logica (de executie)
  5. si ar trebui sa ofere urmatoarea functionalitate: Un proces parinte trimite unui proces fiu spre sortare un array de 10 intregi random
  6. intre 1 si 255, folosind un pipe anonim. Procesul fiu face sortarea pe masura
  7. ce apar elemente in pipe la citire si la final afiseaza array-ul sortat.
  8.  
  9. Corectati in programul de mai jos cele trei greseli introduse voluntar in asa fel incat sa obtineti un program
  10. care se executa in mod corect, conform functionalitatii specificate mai sus.
  11. Dupa linia pe care ati facut o corectie, includeti si o explicatie ca si comentariu pentru a obtine punctajul integral.
  12.  
  13. NOTA: pastrati enuntul in acest comentariu si scrieti rezolvarea mai jos.
  14. *******************************************************************************************************/
  15.  
  16. #include <unistd.h>
  17. #include <stdio.h>
  18. #include <sys/types.h>
  19. #include <sys/wait.h>
  20. #include <stdlib.h>
  21. #include <string.h>
  22. #include <time.h>
  23.  
  24. #define BUFFER_SIZE 10
  25.  
  26. int main(int argc, char* argv[])
  27. {
  28. int sort_pipe[];
  29. pid_t pid;
  30. /* variabila pid trebuie sa fie de tip pid_t */
  31. int i;
  32.  
  33. if( -1 == pipe(sort_pipe))
  34. {
  35. perror("failed to create pipe");
  36. return -1;
  37. }
  38.  
  39. pid = fork();
  40. if(pid == -1)
  41. {
  42. perror("failed to create child process");
  43. return -1;
  44. }
  45.  
  46. if(pid)
  47. {
  48. unsigned char c;
  49. close(sort_pipe[1]);
  50. srand(time(NULL));
  51.  
  52. for (i = 0;i < BUFFER_SIZE; i++)
  53. {
  54. c = rand()%255 + 1;
  55. write(sort_pipe[1], &c, 1);
  56. printf("Parinte: trimit: %d\n", c);
  57. }
  58.  
  59. close(sort_pipe[1]);
  60. }
  61. else
  62. {
  63. char items[256];
  64. unsigned char c;
  65. close(sort_pipe[1]);
  66.  
  67. memset(items,sizeof(items));
  68.  
  69. for (i = 0; i < BUFFER_SIZE; i++)
  70. {
  71. read(sort_pipe[0], &c, 1);
  72. items[c] = 1;
  73. }
  74.  
  75. close(sort_pipe[0]);
  76.  
  77. printf("Copil: Elementele sortate sunt:\n");
  78. for (i = 0; i < sizeof(items); i++)
  79. {
  80. if (items[i])
  81. printf("%d ", i);
  82. }
  83. printf("\n");
  84. }
  85.  
  86. return 0;
  87. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement