12 Parent process sorts an Array and passes the sorted array to child process using command line argument of EXECVE System Call for Search Element in C

Program Main.c:

// COMPILE : gcc main.c -o 
// EXECUTE : ./a.out

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <string.h>

// Function to print the array on console
void print_arr(int arr[100],int n){
	int i;

	printf("\n Your array is - \n [ ");

	for(i=0; i<n-1; i++)
		printf(" %d, ",arr[i]);

	printf(" %d ]",arr[i]);
}

// Quick sort
void quick_sort(int arr[100],int first,int last){

    int i,j,k,pivot,cmp=0,swap=0,temp;

    if(first<last)
    {
        pivot=first;
        i=first;
        j=last;

        while(i<j)
        {
            while(arr[i] <= arr[pivot] && i<last)
                i++;

            while(arr[j] > arr[pivot])
                j--;

            cmp++;
            if(i<j)
            {
                swap++;
                temp=arr[i];
                arr[i]=arr[j];
                arr[j]=temp;
            }
        }

        temp=arr[pivot];
        arr[pivot]=arr[j];
        arr[j]=temp;

        quick_sort(arr,first,j-1);
        quick_sort(arr,j+1,last);
    }
}

void main(){

	// Declare the variables
	int arr[100],n;
	pid_t child;

	// The main process starts
	printf("\n This is the main process - ");
	printf("\n Process Id -> %d",getpid());
	printf("\n Parent Id -> %d",getppid());

	// Take the array input
	printf("\n Enter the size of array - ");
	scanf("%d",&n);
	printf("\n Please enter the elements in the array - ");
	for(int i=0; i<n; i++){
		printf("\n Enter the element [%d] - ",i);
		scanf("%d",&arr[i]);
	}

	// Print the array
	print_arr(arr,n);

	// Sort the array
	printf("\n Sorted Array using Quick sort -> ");
	quick_sort(arr,0,n-1);

	// Print the sorted array
	print_arr(arr,n);

	// Fork System call
	printf("\n Forking the current process - ");
	child = fork();

	if(child == -1)
		printf("\n Unfortunately the child was not born");
	else if(child == 0)
    {
		// Inside child process
		printf("\n\n\n Hello from the child process !");
		printf("\n My id is -> %d",getpid());

		char *buffer[n+1];
		int i;

		// Arg 0 = name of executable file
		buffer[0] = "./binary";
				
		for(i=1;i<n+1;i++){
			buffer[i] = malloc(7);
			snprintf(buffer[i], 7, "%d", arr[i-1]);
            /*
            sprintf stands for "string print". In C programming language, 
            it is a file handling function that is used to send formatted 
            output to the string. Instead of printing on console, sprintf() 
            function stores the output on char buffer that is specified in sprintf.
            */
        }



		buffer[i] = NULL;

		execv("./binary",buffer);
		
		printf("\n\n [INFO] Child executed successfully \n\n\n	");
	}
	else
    {
		// Inside parent process
		printf("\n Hello from the parent process !");
		printf("\n My id is -> %d",getpid());
		printf("\n Child Id -> %d",child);		 
		printf("\n -------- Parent is waiting for child to complete --------");
		wait(NULL);
		printf("\n\n [INFO] Parent executed successfully \n\n\n");
	}
}

Program Binary-Search.c:

// COMPILE : gcc binary_search.c -o binary
// EXECUTE : ./binary

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>

// function to print the array on console
void print_arr(int arr[100],int n){
	int i;

	printf("\n Your array is - \n [ ");

	for(i=0; i<n-1; i++)
		printf(" %d, ",arr[i]);

	printf(" %d ]\n",arr[i]);
}

// binary search
void binary_search(int arr[100],int no,int search){
	int first,last,mid;
	first = 0;
	last = no-1;
	mid = (first + last)/2;

	while(first<=last){
		if(arr[mid] < search)
			first=mid+1;
		else if(arr[mid] == search){
			printf("\n Element was found in the array at location --> %d\n\n",mid);
			break;
		}
		else
			last = mid-1;
		mid = (first + last)/2;
	}

	if(first>last)
		printf("\n Element was NOT found in the array \n\n");
}

// main function of the program
void main(int argc, char* argv[], char* envp){

	int arr[argc-1],search;

	for(int i=1;i<argc;i++)
		arr[i-1]=atoi(argv[i]);

	print_arr(arr,argc-1);		

	printf("\n Enter the value to be searched --> ");
	scanf("%d",&search);

	binary_search(arr,argc-1,search);
}


Output:

execv system call


Previous
Next Post »