Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- int count=0;
- /* Merge sort the data. */
- void *merge_sort(struct block *my_data) {
- int fd[2];
- pid_t ls_pid,sort_pid;
- // print_block_data(my_data);
- if (my_data->size > 1) {
- struct block left_block;
- struct block right_block;
- left_block.size = my_data->size / 2;
- left_block.first = my_data->first;
- right_block.size = left_block.size + (my_data->size % 2);
- right_block.first = my_data->first + left_block.size;
- //create pipe
- if (count == 0 ){
- count++;
- if (pipe(fd) == -1){
- fprintf(stderr,"pipe failed");
- return 1;
- }
- sort_pid = fork();
- if (sort_pid < 0){
- perror("/nChile 2 fork failed");
- return 1;
- }
- if (sort_pid == 0){
- //I AM PARENT
- merge_sort(&left_block);
- }else{
- //I AM CHILd
- merge_sort(&right_block);
- write(fd[0],&left_block,sizeof(struct block));
- }
- }
- merge_sort(&right_block);
- merge_sort(&left_block);
- if(count == 0){
- read(fd[0],&left_block,sizeof(struct block));
- merge(&left_block, &right_block);
- }
- merge(&left_block, &right_block);
- }
- return NULL;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement