Question & Answer: Use a single pipe in a C program and create 3 child processes. Each child process should prompt th…..

Use a single pipe in a C program and create 3 child processes. Each child process should prompt the user to enter a character and then writes it into the pipe. The parent process should read from the pipe and display the character with the largest ASCII value.

Expert Answer

 

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int main(int argc, char *argv[])
{
int fd[2];
char val;
char data[3];
int count;

pipe(fd);

if (fork() != 0)
{
if (fork() != 0){
if (fork() != 0){
close(fd[1]);
//val = 100;
count = 0;
while (count < 3) {
read(fd[0], &val, sizeof(val));
data[count] = val;
printf(“Parent received value: %cn”, val);
count++;
}
if (data[0] > data[1]){
if (data[0] > data[2])
printf(“n%cn”,data[0]);
else
printf(“n%cn”,data[2]);
}
else {
if (data[1] > data[2])
printf(“n%cn”,data[1]);
else
printf(“n%cn”,data[2]);

}
close(fd[0]);
}
else {
close(fd[0]);

printf(“nChild3 waiting for input:n”);
scanf(“%c”, &val);
fflush(stdin);
write(fd[1], &val, sizeof(val));
printf(“Child3 sent value: %cn”, val);
close(fd[0]);
}
}
else {
close(fd[0]);

printf(“nChild2 waiting for input:n”);
scanf(“%c”, &val);
fflush(stdin);
write(fd[1], &val, sizeof(val));
printf(“Child2 sent value: %cn”, val);
close(fd[0]);

}
}
else
{
close(fd[0]);

printf(“nChild1 waiting for input:n”);
scanf(“%c”, &val);
fflush(stdin);
write(fd[1], &val, sizeof(val));
printf(“Child1 sent value: %cn”, val);

// close the read-descriptor
close(fd[0]);
}
return 0;
}

Still stressed from student homework?
Get quality assistance from academic writers!