The purpose of this practical is to allow a process to multiplex I/O, that is to say, in our case, to "listen" several file descriptors to which data can arrive. For this, we will establish a set of processes with one "master" and seceral slaves. Slaves send data and master is waiting at any time, in a passive waiting.

Exercise 1 - the slave

In less than 10 minutes (not kidding), write the program repeat, which takes two arguments: a message and a time (in microseconds), the program will display the message at regular intervals (in an infinite loop). To avoid the problem of buffering, use write(). Use usleep() for the delay.

Exercise 2 - Multiplexer

Then write the master. It will first performs several fork(), to start multiple instances of repeat, with different parameters, and redirecting the output of each program to a pipe (one pipe per instance). The program must listen to all the pipes in parallel, and when data is displayed on a pipe, it should display them on the standard output (by prefixing the PID of the process, for example). In order to multiplex the inputs, use the system call select().

Exercise 3 - less selective with Paul

Same exercise with the system call poll().