33.4k views
5 votes
Two of the most fundamental functions for dealing with interprocess communication are read() and write(). Consider the following otherwise valid C program:int r, pipeFDs[2];

char message[512];
pid_t spawnpid;

pipe(pipeFDs);
spawnpid = fork();

switch (spawnpid)
{
case 0:
close(pipeFDs[0]); // close the input file descriptor
write(pipeFDs[1], "hi process, this is the STUFF!!", 21);
break;

default:
close(pipeFDs[1]); // close output file descriptor
r = read(pipeFDs[0], message, sizeof(message));
printf("Message received from other: %s\\", message);
break;
}

Select each of the following answers that is correct. CAN BE MULTIPLE CHOICES...
(1) The read() call may block until data becomes available
(2) When the read() call returns, this one call will return all of the data that was sent through the pipe, which is different behavior than if this was a socket
(3) If the read() call blocks, the process will be suspended until data arrives
(4) The write() call will return before all of the data has been written, if the corresponding read() call blocks mid-transfer
(5) Pipes can fill, which will cause the write() call to block until the read() call is able to read data from the pipe

User Jimmery
by
5.1k points

1 Answer

2 votes

Answer: Provided in the explanation section

Step-by-step explanation:

int r, pipeFDs[2];

char message[512];

pid_t spawnpid;

pipe(pipeFDs);

spawnpid = fork();

switch (spawnpid)

{

case 0:

close(pipeFDs[0]); // close the input file descriptor

write(pipeFDs[1], "hi process, this is the STUFF!!", 21);

break;

default:

close(pipeFDs[1]); // close output file descriptor

r = read(pipeFDs[0], message, sizeof(message));

printf("Message received from other: %s\\", message);

break;

}

Observation of the program:

  1. The read() call may block until data becomes available
  2. If the read() call blocks, the process will be suspended until data arrives
  3. Pipes can fill, which will cause the write() call to block until the read() call is able to read data from the pipe

⇒ Therefore,Option 1,3 and 5 correct

Cheers i hope this helped !!!

User AntonDelprado
by
5.8k points