Description
1. In your program, the parent process takes the input data of sixteen integer values from the command line and
verifies for correctness (through argc and argv in main(int argc, char *argv[ ])). If the number of input is not
correct, or any of the input data is not an integer (e.g., abc, −34a5, or 3.14), the parent process should
prompt the user with the message: “Incorrect number of input or incorrect type of input” and then exit.
Signed integers such as +25, −38 should be allowed. The sixteen input integer values, !0,.., !7, b0,.., b7,
given at the command line in that order are elements of the following two input matrices, respectively:
! = !0 !1 !2 !3
!4 !5 !6 !7 , ! =
!0 !1
!2 !3
!4 !5
!6 !7
2. After verifying that the input data are correct, the parent process then creates five child processes (fork) to
carry out the matrix multiplication and the result display. The first child calculates c0, second child c1, third
child c2, and fourth child c3, in the resulting matrix C below. Four child processes (MC0, .., MC3) then send
their respective results separately to the fifth child (Display) that displays the resulting matrix C using
printf. Five child processes will exit after finishing their respective tasks (exit).
!0 !1 !2 !3
!4 !5 !6 !7 ×
!0 !1
!2 !3
!4 !5
!6 !7
=
!0 !1
!2 !3 where c0 = !0 *b0 + !1 * b2 + a2 * b4 + a3 * b6
3. The Display process can display the resulting matrix in the following manner using printf:
The first row of the resulting matrix is: c0 c1
The second row of the resulting matrix is: c2 c3
4. Four communication channels need to be set up between each of MC0, .., MC3 and Display. The unnamed
pipes will be used for that purpose (use online manual pages man, or refer to pp.142-145 of the textbook, or
pp.124-125 of the reference book for pipe, read, write, close, if you are not familiar with those
system calls). The parent process will set up the pipes before spawning the five child processes.
5. The parent process will wait until after all five child processes finish their tasks (waitpid), then it exits.
Arrange some messages (via printf) from all processes before they exit. For the parent, display a
message before each child process is created, a message before issuing waitpid calls to start the waiting
stage, and a message before it exits. For each of the child processes, display a message including its pid and
its parent’s pid (getpid, getppid) right after being created, a message for its result (computation results,
or communication results), and a message before its termination.
6. Be sure to include the following header files at the top of your program. Be sure to include adequate
commenting (point deduction for programs with inadequate comments).
#include
#include
#include
#include
#include
#include
7. Compile your program using gcc and run your program with at least the following four scenarios. Submit
your source file to SacCT Assignment1.
gcc prog1.c -o prog1
prog1 ……//incorrect number of input, say, 10 or 17 integers.
prog1 ……//incorrect type of input, say, -3a4 in command line.
prog1 ……//16 integers, say, 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
prog1 ……//16 integers, say, 12 –11 10 –9 +8 7 +6 -5 -4 +3 2 1 2 3 4 5