127k views
4 votes
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;

}

User Sakthig
by
5.3k points

1 Answer

4 votes

Answer:

jehshebfejsnsfefegegrgdjegxhdghsgdhcbfvxhevhsfhehdhdghdhdbdbsfeh

User Peter Schorn
by
4.6k points