Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*******************************************************************************************************
- Enunt a doua problema:
- Programul de mai jos contine doua greseli sintactice (errors si/sau warnings detectabile la compilare) si o greseala logica (de executie)
- si ar trebui sa ofere urmatoarea functionalitate: Un proces parinte trimite unui proces fiu spre sortare un array de 10 intregi random
- intre 1 si 255, folosind un pipe anonim. Procesul fiu face sortarea pe masura
- ce apar elemente in pipe la citire si la final afiseaza array-ul sortat.
- Corectati in programul de mai jos cele trei greseli introduse voluntar in asa fel incat sa obtineti un program
- care se executa in mod corect, conform functionalitatii specificate mai sus.
- Dupa linia pe care ati facut o corectie, includeti si o explicatie ca si comentariu pentru a obtine punctajul integral.
- NOTA: pastrati enuntul in acest comentariu si scrieti rezolvarea mai jos.
- *******************************************************************************************************/
- #include <unistd.h>
- #include <stdio.h>
- #include <sys/types.h>
- #include <sys/wait.h>
- #include <stdlib.h>
- #include <string.h>
- #include <time.h>
- #define BUFFER_SIZE 10
- int main(int argc, char* argv[])
- {
- int sort_pipe[];
- pid_t pid;
- /* variabila pid trebuie sa fie de tip pid_t */
- int i;
- if( -1 == pipe(sort_pipe))
- {
- perror("failed to create pipe");
- return -1;
- }
- pid = fork();
- if(pid == -1)
- {
- perror("failed to create child process");
- return -1;
- }
- if(pid)
- {
- unsigned char c;
- close(sort_pipe[1]);
- srand(time(NULL));
- for (i = 0;i < BUFFER_SIZE; i++)
- {
- c = rand()%255 + 1;
- write(sort_pipe[1], &c, 1);
- printf("Parinte: trimit: %d\n", c);
- }
- close(sort_pipe[1]);
- }
- else
- {
- char items[256];
- unsigned char c;
- close(sort_pipe[1]);
- memset(items,sizeof(items));
- for (i = 0; i < BUFFER_SIZE; i++)
- {
- read(sort_pipe[0], &c, 1);
- items[c] = 1;
- }
- close(sort_pipe[0]);
- printf("Copil: Elementele sortate sunt:\n");
- for (i = 0; i < sizeof(items); i++)
- {
- if (items[i])
- printf("%d ", i);
- }
- printf("\n");
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement