loading...

CS604 Operating Systems Assignment 2 Solution Spring 2013

Question: [Marks 20]
Write a simple C language program. Program has following main tasks to be performed.
Parent process creates child process using fork ().
Perform an IPC between related processes using pipe ().
Now specifically child process will do following.(1 mark on each step)
1. Child process should display its PID (process ID)
2. Child process should display its parent’s PID
3. Child process should take a string as input from user which would be its VU id.
4. Child should write this test string (VU student ID) using write () system call in IPC pipe.

5. Child process should take any value from 0 to 255 from user. After that child process exits and returns to the parent process.
Now specifically parent will perform following tasks .(1 mark on each step)
1. Parent process should display its PID (process ID).
2. Child process value returned to its parent by fork () and show return value.
3. Parent process wait for child process to complete its tasks
4. Parent process should read the message (VU student ID) written by child process and display it on screen.
5. Parent process should print length of string entered by student.
Sample output is given below. .(1 mark on each main step)
SAMPLE OUTPUT
CHILD: I am the child process!
CHILD: Here’s my PID: 5667
CHILD: My parent’s PID is: 5666
CHILD: Enter your student id: bc12345678
CHILD: Student id is: bc12345678
CHILD: I am writing VU student to pipe…
CHILD: Enter any value from 0 to 255: 104
CHILD: Goodbye!
PARENT: I am the parent process!
PARENT: Here’s my PID: 5666
PARENT: Value returned by child code is: 104
PARENT: I am reading VU student id from pipe bc12345678
PARENT: Length of VU student ID is: 10
PARENT: Good work child!
Execute your program in Linux Ubuntu. Take screen shots of your program that you write in C, Commands that you used to run your program in Linux Ubuntu and the output displayed by your program.
Note:
1) Do not write your program in other languages like Java, C++ etc. Write your program only in C language.
2) Do not execute your program in other operating systems like Windows, Mac etc. Execute your program only in Linux Ubuntu flavor.
3) You should provide three screen shots. Required three screen shots that you have to provide are given below.
I) Screen shots of your complete program that you write in C. Your screen shots should display your complete program code that you write in C.
II) Screen shot of Commands that you used to run your program in Linux Ubuntu.
III) Screen shot of final output of your program shown.
4) If you will copy your assignment then you will get zero marks with no leniency.
5) Each student should display his own complete VU student ID.
6) In your program’s output, each student should indicate the execution of parent and child processes codes by using the words PARENT: and CHILD: in the output display as shown in the sample output.

Solution:

#include <unistd.h> 
#include <sys/types.h> 
#include <errno.h> 
#include <stdio.h> 
#include <sys/wait.h> 
#include <stdlib.h>
int main()
{
pid_t childpid; 
int retval; 
int status;
childpid = fork();
if (childpid >= 0) 
{
if (childpid == 0) 
{
char id[100];

printf("CHILD: MC100402167:n");
scanf("%s",id);
printf("Student ID is %s n", id);
printf("CHILD: I am the child process!n");
printf("CHILD: Here's my PID: %dn", getpid());
printf("CHILD: My parent's PID is: %dn", getppid());
printf("CHILD: The value of my copy of childpid is: %dn", childpid);
printf("CHILD: Sleeping for 1 second.n");
sleep(1); 
printf("CHILD: Enter an exit value (0 to 255): ");
scanf(" %d", &retval);
printf("CHILD: Goodbye!n"); 
exit(retval);
}
else
{
printf("PARENT: I am the parent process!n");
printf("PARENT: Here's my PID: %dn", getpid());
printf("PARENT: The value returned by child code is %dn", childpid);
printf("PARENT: I will now wait for my child to exit.n");
wait(&status); 
printf("PARENT: Child's exit code is: %dn", WEXITSTATUS(status));
printf("PARENT: Good work child!n"); 
exit(0); 
}
}
else 
{
printf("Fork failed due to some error");
exit(0); 
}
}

 

DOWNLOAD SOLUTION HERE
loading...