Advertisement
Guest User

Untitled

a guest
Aug 18th, 2019
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.38 KB | None | 0 0
  1. int count=0;
  2. /* Merge sort the data. */
  3. void *merge_sort(struct block *my_data) {
  4. int fd[2];
  5. pid_t ls_pid,sort_pid;
  6. // print_block_data(my_data);
  7. if (my_data->size > 1) {
  8. struct block left_block;
  9. struct block right_block;
  10. left_block.size = my_data->size / 2;
  11. left_block.first = my_data->first;
  12. right_block.size = left_block.size + (my_data->size % 2);
  13. right_block.first = my_data->first + left_block.size;
  14. //create pipe
  15. if (count == 0 ){
  16. count++;
  17. if (pipe(fd) == -1){
  18. fprintf(stderr,"pipe failed");
  19. return 1;
  20. }
  21. sort_pid = fork();
  22. if (sort_pid < 0){
  23. perror("/nChile 2 fork failed");
  24. return 1;
  25. }
  26. if (sort_pid == 0){
  27. //I AM PARENT
  28. merge_sort(&left_block);
  29.  
  30. }else{
  31. //I AM CHILd
  32. merge_sort(&right_block);
  33. write(fd[0],&left_block,sizeof(struct block));
  34. }
  35. }
  36. merge_sort(&right_block);
  37. merge_sort(&left_block);
  38. if(count == 0){
  39. read(fd[0],&left_block,sizeof(struct block));
  40. merge(&left_block, &right_block);
  41. }
  42. merge(&left_block, &right_block);
  43. }
  44. return NULL;
  45. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement