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; 
 }