The following program is designed to echo a message from one child process to another, with upper and lowercase letter reversed. The program reliably outputs just the message "h" and then quits. Explain in a very clearly why this is the output.Suggest how the program could be corrected to produce the expected output.
#include
#include
#include
#include
#include
#include
int main()
{
int fd1[2];
int fd2[2];
char message[] = "Hello, world!\\";
char buffer[100];
pid_t pid1;
pid_t pid2;
if (pipe(fd1) == -1)
{ return 1;
}
if (pipe(fd2) == -1)
{ return 1;
}
pid1 = fork();
pid2 = fork();
if (pid1 < 0)
{ return 1;
}
if (pid2 < 0)
{ return 1;
}
if (pid1 > 0)
{
close(fd2[0]);
write(fd2[1], message, strlen(message)+1);
close(fd2[1]);
close(fd1[1]);
read(fd1[0], buffer, 100);
close(fd1[0]);
printf("%s", buffer);
}
else if (pid2 > 0) {
close(fd2[1]);
read(fd2[0], buffer, 100);
close(fd2[0]);
close(fd1[0]);
for (int i=0; i
if(islower(buffer[i])) {
buffer[i] = toupper(buffer[i]);
}
else {
buffer[i] = tolower(buffer[i]);
}
sleep(1);
write(fd1[1], &buffer[i], 1);
}
close(fd1[1]);
}
return 0;
}