Program Parent.c:
#include<stdio.h>
#include<stdlib.h>
#include <string.h>
void bubbleSort(int arr[],int n)
{
printf("\n Sorting Started \n");
for(int i=0;i<n;i++)
{
for(int j=0;j<n-1;j++)
{
if(arr[j] > arr[j+1])
{
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
printf("\n\n Sorting Completed! \n");
}
// To Convert Integer to Char*
void tostring(char str[], int num)
{
int i, rem, len = 0, n;
n = num;
while (n != 0)
{
len++;
n /= 10;
}
for (i = 0; i < len; i++)
{
rem = num % 10;
num = num / 10;
str[len - (i + 1)] = rem + '0';
}
str[len] = '\0';
}
void main(int argc, char *argv[])
{
printf("\n This is the main process: ");
printf("\n Process Id: %d",getpid());
printf("\n Parent Id: %d",getppid());
int arr[] = {10,5,1,60,20};
int n = 5;
printf("\n\n Sorting Array using Bubble Sort:");
bubbleSort(arr,n);
printf("\n Forking the current process:");
pid_t cpid = fork();
//The pid_t data type is a signed integer type which is capable of representing a process ID.
if(cpid > 0)
{
printf("\n\n Parent is Running:\n ParentID: %d \n It's ID: %d \n",getppid(),getpid());
printf("\n Parent is waiting for child to Complete! \n\n");
wait(NULL);
printf("\n\n Parent is Exiting!!\n");
}
else if(cpid == 0)
{
printf("\n\n Child is running:\n ParentID: %d \n It's ID: %d \n",getppid(),getpid());
char *arrChar[n+1];
// Creating Ascii Character Array to Pass
// as command line Argument
arrChar[0] = (char *) "child"; // Arg 0 = name of executable file
for(int i=0;i<n;i++)
{
char *string = malloc (sizeof(char) * (20));
tostring(string,arr[i]);
arrChar[i+1] = string;
}
arrChar[n+1] = NULL;
printf("\n\n Child Calling EXECV System Call:\n");
execv("./child",arrChar);
printf("\n\n Child EXECV Call Complete\n");
printf("\n\n Child Execution Complete \n");
}
else if(cpid < 0)
{
printf("Error");
}
}
Program Child.c:
#include <stdio.h>
#include<stdlib.h>
void main(int argc, char *argv[])
{
/* argv[0] is the program name */
int *data = (int *) malloc((argc) * sizeof(int));
printf("\n Argc:%d",argc);
for(int i = 0;i < argc;i++)
{
data[i] = atoi(argv[i]);
}
// Printing Element in Reverse
printf("\n Printing Element in Reverse:");
for(int i = argc-1; i>0;i--)
{
printf(" %d ",data[i]);
}
printf("\n\n EXCEV task Completed \n");
}
Output:
