All Exercise Codes
All Exercise Codes
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
---> Code:
#! /usr/bin/bash
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
---> Code:
#! /usr/bin/bash
if [ $c -eq 1 ]
then
let d=$a+$b
echo "Sum of these two numbers is: $d"
fi
if [ $c -eq 2 ]
then
echo " "
echo "Do you wanna Subtract: "
echo "1. 1st no. from 2nd no."
echo "OR"
echo "2. 2nd no. from 1st no."
echo "Enter 1 or 2 as per your need."
read e
if [ $e -eq 1 ]
then
let d=$b-$a
echo " "
echo "When you subtract 1st no. from 2nd no. you get: $d"
elif [ $e -eq 2 ]
then
let d=$a-$b
echo " "
echo "When you subtract 2nd no. from 1st no. you get: $d"
fi
fi
if [ $c -eq 3 ]
then
let d=$a*$b
echo "Multiplication of these two numbers is: $d"
fi
if [ $c -eq 4 ]
then
echo " "
echo "Do you wanna Divide: "
echo "1. 1st no. by 2nd no."
echo "OR"
echo "2. 2nd no. by 1st no."
echo "Enter 1 or 2 number as per your need."
read e
if [ $e -eq 1 ]
then
echo " "
echo "When you divide 1st no. by 2nd no. you get: "
echo "scale=2; $a/$b" | bc
elif [ $e -eq 2 ]
then
echo " "
echo "When you divide 2nd no. by 1st no. you get: "
echo "scale=2; $b/$a" | bc
fi
fi
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Q3. Write a shell script for "Diplaying prime numbers upto a given limit"
---> Code:
#! /usr/bin/bash
if [ $n -eq 0 ]
then
echo $i
fi
done
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Q1. Using system calls copy first half of the content of a already existing file to
a newly created file and then again copy the rest remaining second half of the
content of that older file to a another newly created file
---> Code:
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int main(){
int a, b, c, n;
char buff1[500];
return 0;
}
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Q2. Using system calls write a program which reads from console until user types
'$' and the content which is written on the console before '$' copy that content to
a newly created file
---> Code:
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int main(){
int a, b=0;
char buff1[500];
scanf("%[^\n]s", buff1);
else{
b++;
}
}
char buff2[b];
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Q3. Write a program using system call to read the contents of a file without using
char array and display the contents on the console (Don't use any built in
functions like sizeof() and strlen())
---> Code:
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int main(){
int a, b;
a = open("Input.txt", O_RDONLY | O_CREAT, 0777);
char buff[1];
char *c = buff;
return 0;
}
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Q1. Write a program using directory system calls, make a directory on desktop and
create a file inside the directory and list the contents of the directory
---> Code:
#include<stdio.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<dirent.h>
int main()
{
int a = mkdir("My_Directory",0777);
if(a!=-1)
{
printf("# You're directory has been created: \n");
printf(" \n");
}
while(NULL!=(dptr = readdir(dp)))
{
printf("%s\n", dptr->d_name);
}
return 0;
}
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Q2. Write a program using directory and file manipulation system calls to copy the
contents of one directory to a newly created directory
---> Code:
#include<stdio.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<dirent.h>
int main()
{
struct dirent *dptr;
char c[1000];
printf("# Kuch to likh de yaar file me, copy karani hai file: \n");
scanf("%[^\n]s", c);
printf(" \n");
int size=0;
for(int i=0;i<100;i++)
{
if(c[i]=='\0'){
break;
}
else{
size++;
}
}
write(fd1, c, size);
printf("@ Given input text from user has been Successfully copied in file
named 'My_File.txt'. \n");
printf(" \n");
int no_of_files=-2;
while(NULL != (dptr=readdir(dp)))
{
no_of_files++;
}
write(fd2, c, size);
printf("* Content of File named 'My_File' in Directory named 'My_Directory'
has been Successfully Copied to file named 'My_File_Copy.txt' which is in Directory
named 'Your_Directory' \n");
printf(" \n");
//
-----------------------------------------------------------------------------------
------
int new_no_of_files=-2;
while(NULL != (dptr=readdir(dp1)))
{
new_no_of_files++;
}
return 0;
}
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Q1. Write a program using system calls for operation on process to stimulate n fork
calls to create (2^n - 1) child processes
---> Code:
int main(){
int n;
printf("# Enter the no. of times you want to run the fork system call: ");
scanf("%d", &n);
return 0;
}
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Q2. Write a program using system calls for operations on processes to create a
heirarchy of processes P1 -> P2 -> P3, also print the id and parent id for each
process
---> Code:
int main()
{
printf("Parent PID : %d \n", (int) getpid());
if(pid == 0)
{
printf("Child 1 PID : %d Parent PID : %d\n", (int) getpid(), (int)
getppid());
pid_t pid_1 = fork();
if(pid_1 == 0)
{
printf("Child 2 PID : %d Parent PID (Child 1) : %d \n", (int)
getpid(), (int) getppid());
exit(0);
}
else
{
exit(0);
}
}
else
{
exit(0);
}
return 0;
}
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Q3. Write a program using system calls for operations on processes to create a
heirarchy of processes: P3 <- P2 <- P1 -> P4 -> P5, also stimulate process P4 as
orphan and P5 as zombie
---> Code:
// In Orphan Process, child process P4 goes to sleep and whenever the sleep time
period is completed and P4 comes back for execution it's parent has already
completed it's execution. So, it will get a garbage parent PID, whenever it wants
to access it's parents PID as it is a orphan process.
// In Zombie Process, the parent process P4 goes to sleep and the child process P5
executes before P4 and leaves, and then after the completion of sleep time period
process P4 executes, so here child process P5 will be called zombie process beacuse
it has executed before it's parent's execution, and for P4 (parent) the process P5
is still visible in it's table but it has already completed it's execution.
int main()
{
printf("P1 PID : %d \n", (int) getpid());
pid_t pid = fork();
if(pid == 0)
{
printf("P4 PID : %d P1 PID : %d\n", (int) getpid(), (int) getppid());
printf("Child process P4 is sleeping \n");
pid_t pid_1 = fork();
sleep(5);
if(pid_1 == 0)
{
printf("P5 PID : %d P4 PID : %d \n", (int) getpid(), (int)
getppid());
printf("Zombie process P5's PID : %d \n", (int) getpid());
}
else{
printf("Orphan child process P4's PID : %d \n", (int) getpid());
printf("P4's New Parent PID : %d \n", (int) getppid());
}
}
else
{
pid = fork();
if(pid == 0)
{
printf("P2 PID : %d P1 PID : %d\n", (int) getpid(), (int)
getppid());
pid_t pid_1 = fork();
if(pid_1 == 0)
{
printf("P3 PID : %d P2 PID : %d \n", (int) getpid(), (int)
getppid());
exit(0);
}
else
{
exit(0);
}
}
else
{
exit(0);
}
}
return 0;
}
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Q4. Write a program using system calls for operations on processes to create a
heirarchy of processes: P4 <- P3 <- P2 <- P1 -> P5 -> P6 -> P7, also stimulate
process P4 as an orphan process and P7 as zombie process
---> Code:
int main()
{
printf("P1 PID : %d \n", (int) getpid());
if(pid == 0)
{
printf("P5 PID : %d Parent P1 PID : %d\n", (int) getpid(), (int)
getppid());
pid_t pid_1 = fork();
if(pid_1 == 0)
{
printf("P6 PID : %d Parent P5 PID : %d \n", (int) getpid(), (int)
getppid());
if(pid_2 == 0)
{
printf("Zombie process P7's PID: %d \n", (int) getpid());
printf("Parent P6 PID : %d \n", (int) getppid());
}
else
{
exit(0);
}
}
else
{
exit(0);
}
}
else
{
pid = fork();
if(pid == 0)
{
printf("P2 PID : %d Parent P1 PID : %d\n", (int) getpid(), (int)
getppid());
pid_t pid_1 = fork();
if(pid_1 == 0)
{
printf("P3 PID : %d Parent P2 PID : %d \n", (int) getpid(),
(int) getppid());
return 0;
}
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Q1. Write a program using pthread to concatenate the strings, where multiple
strings are passed to thread function
---> Code:
#include<stdio.h>
#include<unistd.h>
#include<pthread.h>
#include<string.h>
void *concatenatestrings(){
strcat(result, str1);
strcat(result, str2);
pthread_exit(NULL);
}
int main(){
pthread_t thread;
printf("* Enter the first string: ");
scanf("%s", str1);
printf("* Enter the second string: ");
scanf("%s", str2);
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Q2. Write a program using pthread to find the length of string, where strings are
passed to thread function
---> Code:
#include<stdio.h>
#include<unistd.h>
#include<pthread.h>
#include<string.h>
char length1[100];
int length=0;
void *lengthstr(){
length=strlen(length1);
pthread_exit(NULL);
}
int main(){
pthread_t thread;
printf("* Enter the String: ");
scanf("%[^\n]s", length1);
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
---> Code:
#include<stdio.h>
#include<pthread.h>
int arr[10] = {99, 22, 00, 88, 11, 102, 33, 66, 44, 55};
void *sort(){
for(int i=0; i<10; i++){
for(int j=0; j<10; j++){
if(arr[i] < arr[j]){
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
}
void *min(){
int min = arr[0];
printf("* Minimum element is = %d\n", min);
pthread_exit(NULL);
}
void *max(){
int max = arr[9];
printf("* Maximum element is = %d \n", max);
pthread_exit(NULL);
}
void *avg(){
int sum=0;
for(int i=0;i<10;i++)
{
sum = sum + arr[i];
}
sum = sum/10;
int main(){
printf("\n");
/*
printf("Enter 10 elements in the array: ");
for(int i=0; i<10; i++)
{
scanf("%d", &arr[i]);
}
printf("\n");
*/
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Q4. Write a multithreaded program where an array of integers is passed globally and
is divided into two smaller lits and given as input to two threads. The thread will
sort their half of the list and will pass the sorted list to a third thread which
merges and sorts the list. The final sorted list is printed by the parent thread.
---> Code:
#include<stdio.h>
#include<pthread.h>
int arr[10] = {99, 22, 00, 88, 11, 100, 33, 66, 44, 55};
void *final_merge_sort(){
pthread_exit(NULL);
}
void *individual_sort(){
for(int i=0; i<5; i++){
for(int j=0; j<5; j++){
if(arr_first_half[i] < arr_first_half[j]){
int temp = arr_first_half[i];
arr_first_half[i] = arr_first_half[j];
arr_first_half[j] = temp;
}
if(arr_second_half[i] < arr_second_half[j]){
int temp = arr_second_half[i];
arr_second_half[i] = arr_second_half[j];
arr_second_half[j] = temp;
}
}
}
pthread_exit(NULL);
}
int main()
{
printf("\n");
/*
printf("Enter 10 elements in the array: ");
for(int i=0; i<10; i++)
{
scanf("%d", &arr[i]);
}
printf("\n");
*/
pthread_t parent_thread;
pthread_create(&parent_thread, NULL, individual_sort, NULL);
pthread_join(parent_thread, NULL);
return 0;
}
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
---> Code:
#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
int NUM_THREADS = 2;
int shared = 0;
pthread_exit(NULL);
}
int main() {
pthread_t threads[NUM_THREADS];
int thread_ids[NUM_THREADS];
return 0;
}
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
---> Code:
#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
int NUM_THREADS = 2;
int shared = 0;
pthread_mutex_t mutex;
int main() {
pthread_t threads[NUM_THREADS];
int thread_ids[NUM_THREADS];
pthread_mutex_init(&mutex,NULL);
for (int i = 0; i < NUM_THREADS; i++) {
thread_ids[i] = i;
pthread_create(&threads[i], NULL, thread_func, (void *) &thread_ids[i]);
}
return 0;
}
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
---> Code:
#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#include <semaphore.h>
int NUM_THREADS = 2;
int shared = 0;
sem_t semaphore;
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
---> Code:
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
int BUFFER_SIZE = 5;
int buffer[5];
int count = 0;
int last_consumed_index = 0;
int main() {
pthread_t producer_thread, consumer_thread;
srand(time(NULL)); // initialize the random seed
pthread_join(producer_thread, NULL);
pthread_join(consumer_thread, NULL);
return 0;
}
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
---> Code:
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <semaphore.h>
int NUM_READERS = 3;
int NUM_WRITERS = 2;
int MAX_ATTEMPTS = 5;
// Shared data
int shared_data = 0;
int num_readers = 0;
// Semaphores
sem_t mutex;
sem_t wrt;
// Reader function
void *reader(void *arg) {
int id = *(int*)arg;
int attempts = 0;
// Critical section
printf("Reader %d read shared_data as %d\n", id, shared_data);
// Exit section
sem_wait(&mutex);
num_readers--;
if (num_readers == 0) {
sem_post(&wrt);
}
sem_post(&mutex);
attempts++;
}
pthread_exit(NULL);
}
// Writer function
void *writer(void *arg) {
int id = *(int*)arg;
int attempts = 0;
// Critical section
shared_data++;
printf("Writer %d wrote shared_data as %d\n", id, shared_data);
// Exit section
sem_post(&wrt);
attempts++;
}
pthread_exit(NULL);
}
int main() {
// Initialize semaphores
sem_init(&mutex, 0, 1);
sem_init(&wrt, 0, 1);
// Destroy semaphores
sem_destroy(&mutex);
sem_destroy(&wrt);
return 0;
}
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
* Establish Interprocess communication (IPC) between Parent and child process using
unnamed pipe.
---> Code:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main() {
int pipefd[2]; // file descriptors for the pipe
char buffer[25];
pid_t pid;
return 0;
}
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
* Establish Interprocess communication (IPC) between Parent and child process using
named pipe.
---> Code:
#include <sys/types.h>
#include <sys/stat.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <stdio.h>
int main(){
int pid, fd1, fd2;
char buffer[20];
mkfifo("my_Pipe", 0666);
pid=fork();
if(pid > 0){
//Parent Section
fd1=open("my_Pipe", O_WRONLY);
write(fd1, "Hello Child Process\n",20);
}
if(pid==0){
//Child section
fd2=open("my_Pipe", O_RDONLY);
read(fd2, buffer, 20);
printf("%s", buffer);
}
return 0;
}