Write and run a C program on UNIX that creates four new processes: A, B, C, and D. When the original process creates the new processes, it passes them all the same pipe that they can use to send data to the original process, which will serve as a logging process, displaying each line it receives along with a time stamp. A pipeline is to exist between A and B, another between
B and C, and another between B and D. Including the shared pipe back to the logging process and these three pipes (A-B, B-C, B-D) there are four pipes. Process A generates 10 records consisting of the letter C or D (picked at random for each record) along with the record number (1 byte ASCII) issued sequentially from 0 to 9 and sends it to process B. Process A also sends a log message something like: A sent process B 'D1' to the logging process.
Process B reads from the pipe connecting it to A. For each record it reads, it will send it to the process indicated by the first character, along with sending an appropriate log message to the logging process. For example, if it receives a message containing 'C2', it sends the message to process C. After sending the logging message, process B waits one second.
Process C reads its pipe and for each message received it sends the logging process an appropriate message.
Process D reads its pipe and for each message received it sends the logging process an appropriate message. Process D then waits 5 seconds after every time it receives a message. The logging process should terminate when it receives 30 messages, which is 10 messages from A to B, a total of 10 messages from either B to C or B to D, and then a total of 10 more messages from either C or D indicating receipt. Implement some way to terminate the other processes at appropriate times. Here is pseudocode for the pipe program:
Main program
Include header files
Initialize variables
Create log pipe
Create A-B pipe
Create B-C pipe
Create B-D pipe
Fork process A
Loop 10 times
Create 10 records, starting with 'C' or 'D' chosen randomly
followed by a number from 0 to 9 issued in sequential order
Write each record to the A-B pipe
Write a message to the log pipe
End loop
Exit process A
Fork process B
Loop 10 times
Read a record from the A-B pipe
Write records starting with 'C' to the B-C pipe
Write records starting with 'D' to the B-D pipe
Write a message to the log pipe
Delay for 1 second
End loop
Exit process B
Fork process C
Loop until no more messages
Read a record from the B-C pipe
Write a message to the log pipe
End loop
Exit process C
Fork process D
Loop until no more messages
Read a record from the B-D pipe
Write a message to the log pipe
Delay 5 seconds
End loop
Exit process D
Loop 30 times (Logging process - not forked)
Read a message from the log pipe
Add the time to the message
Print the message to the screen
End loop
Kill process A if necessary
Kill process B if necessary
Kill process C if necessary
Kill process D if necessary
End