Skip to content

Commit dcec90a

Browse files
authored
Add files via upload
1 parent db0896a commit dcec90a

File tree

9 files changed

+339
-0
lines changed

9 files changed

+339
-0
lines changed

Intermediate/para1.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
hello can you hear me?

Intermediate/para2.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
heya! Am I audible?

Intermediate/q1.c

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
#include<stdio.h>
2+
#include<stdlib.h>
3+
#include <unistd.h>
4+
#include <sys/wait.h>
5+
#include <string.h>
6+
7+
8+
int main()
9+
{
10+
pid_t pid;
11+
int fd1[2];
12+
int fd2[2];
13+
14+
if(pipe(fd1)==-1){
15+
fprintf(stderr,"Pipe1 failed");
16+
return 1;
17+
}
18+
if(pipe(fd2)==-1){
19+
fprintf(stderr,"Pipe2 failed");
20+
return 1;
21+
}
22+
pid=fork();
23+
if(pid <0){
24+
fprintf(stderr, "Fork failed\n");
25+
26+
}
27+
else if(pid == 0){
28+
char str2[500];
29+
close(fd1[1]);
30+
close(fd2[0]); //close unwanted discripters
31+
read(fd1[0], str2,sizeof(str2));
32+
for (int i = 0; str2[i]!='\0'; i++) {
33+
if(str2[i] >= 'a' && str2[i] <= 'z') {
34+
str2[i] = str2[i] -32;
35+
}
36+
}
37+
write(fd2[1], str2, sizeof(str2));
38+
39+
}
40+
else{
41+
42+
char str1[500];
43+
//scanf("%[^\n]s", str1);
44+
fgets(str1,500,stdin);
45+
//str1=getchar();
46+
close(fd1[0]); // close unwanted descriptors
47+
close(fd2[1]);
48+
write(fd1[1],str1,sizeof(str1));
49+
wait(NULL);
50+
read(fd2[0], str1, sizeof(str1));
51+
printf("%s", str1 );
52+
53+
}
54+
return 0;
55+
}

Intermediate/q2b.c

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
#include <stdio.h>
2+
#include <sys/ipc.h>
3+
#include <sys/msg.h>
4+
#include<string.h>
5+
// structure for message queue
6+
#define delim " ,\t\r\n\a"
7+
char buff[500];
8+
struct msg_buffer {
9+
long msg_type;
10+
char msg[500];
11+
} message;
12+
void main() {
13+
key_t my_key;
14+
int msg_id;
15+
my_key = ftok("progfile", 65); //create unique key
16+
msg_id = msgget(my_key, 0666 | IPC_CREAT); //create message queue and return id
17+
message.msg_type = 1;
18+
FILE *fd= fopen("para2.txt","r");
19+
if(!fd){
20+
printf("Error in opening the file\n");
21+
}
22+
//fgets(buff, 500, fd);
23+
while(fgets(buff, 500, fd)>0){
24+
char* token = strtok(buff," ");
25+
while(token!=NULL){
26+
strcpy(message.msg,token);
27+
msgsnd(msg_id, &message, sizeof(message), 0);
28+
token = strtok(NULL," ");
29+
}
30+
}
31+
//msgsnd(msg_id, &message, sizeof(message), 0); //send message
32+
printf("Sent message is : %s \n", message.msg);
33+
}
34+

Intermediate/q2c.c

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
#include <stdio.h>
2+
#include <sys/ipc.h>
3+
#include <sys/msg.h>
4+
// Define message queue structure
5+
6+
7+
struct msg_buffer {
8+
long msg_type;
9+
char msg[500];
10+
} message;
11+
void main() {
12+
key_t my_key;
13+
int msg_id;
14+
my_key = ftok("progfile", 65); //create unique key
15+
16+
msg_id = msgget(my_key, 0666 | IPC_CREAT); //create message queue and return id
17+
msgrcv(msg_id, &message, sizeof(message), 1, 0); //used to receive message
18+
19+
printf("Received Message is : %s \n", message.msg);
20+
// msgctl(msg_id, IPC_RMID, NULL); //destroy the message queue
21+
22+
}
23+

Intermediate/q3a.c

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
#include <stdio.h>
2+
#include <sys/socket.h>
3+
#include <netinet/in.h>
4+
#include <string.h>
5+
6+
int main(){
7+
int sckid, nBytes;
8+
char buff[1024];
9+
struct sockaddr_in srvAdrs;
10+
socklen_t addr_size;
11+
12+
/*Create UDP socket*/
13+
if((sckid = socket(PF_INET, SOCK_DGRAM, 0))<0)
14+
perror("cannot create socket\n");
15+
16+
/*Configure settings in address struct*/
17+
srvAdrs.sin_family = AF_INET;
18+
srvAdrs.sin_port = htons(8080);
19+
srvAdrs.sin_addr.s_addr = INADDR_ANY;
20+
memset(srvAdrs.sin_zero, '\0', sizeof srvAdrs.sin_zero);
21+
addr_size = sizeof srvAdrs;
22+
23+
FILE *fd= fopen("para1.txt","r");
24+
if(!fd){
25+
printf("Error in opening the file\n");
26+
}
27+
fgets(buff, 500, fd);
28+
if(sendto(sckid,buff,strlen(buff)+1 ,0,(struct sockaddr*)&srvAdrs,addr_size)<0)
29+
perror("Sending packets failed");
30+
31+
return 0;
32+
}

Intermediate/q3c.c

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
#include <stdio.h>
2+
#include <sys/socket.h>
3+
#include <netinet/in.h>
4+
#include <string.h>
5+
#include <stdlib.h>
6+
7+
int main(){
8+
int sckid, nBytes;
9+
char buff[500];
10+
struct sockaddr_in serverAddr, clientAddr;
11+
struct sockaddr_storage srvSt;
12+
socklen_t addr_size;
13+
/*Create UDP socket*/
14+
if((sckid = socket(PF_INET, SOCK_DGRAM, 0))<0)
15+
perror("cannot create socket\n");
16+
17+
/*Configure settings in address struct*/
18+
serverAddr.sin_family = AF_INET;
19+
serverAddr.sin_port = htons(8080);
20+
serverAddr.sin_addr.s_addr = INADDR_ANY;
21+
memset(serverAddr.sin_zero, '\0', sizeof serverAddr.sin_zero);
22+
/*Bind socket with address struct*/
23+
if(bind(sckid, (struct sockaddr *) &serverAddr, sizeof(serverAddr))<0)
24+
perror("bind failed");
25+
26+
addr_size = sizeof srvSt;
27+
28+
/* Recieve packets*/
29+
printf("waiting on port 8080\n");
30+
nBytes = recvfrom(sckid,buff,500,0,(struct sockaddr *)&srvSt, &addr_size);
31+
32+
printf("received %d bytes\n", nBytes);
33+
if (nBytes > 0) {
34+
buff[nBytes] = 0;
35+
printf("received message: \"%s\"\n", buff);
36+
}
37+
38+
return 0;
39+
}

Intermediate/q5.c

Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
#include <stdio.h>
2+
#include <stdlib.h>
3+
#include <string.h>
4+
#include <sys/types.h>
5+
#include <sys/ipc.h>
6+
#include <sys/shm.h>
7+
#include<semaphore.h>
8+
#include<unistd.h>
9+
#include<pthread.h>
10+
#define SHM_SIZE 8 /* make it a 8byte hared memory segment */
11+
char *data;
12+
sem_t mutex,mutex_w;
13+
pthread_t writerthreads[10],readerthreads[102];
14+
int readercount = 0;
15+
16+
void *writer(void* param)
17+
{ char *temp="Please Wait";
18+
int i=(int)param;
19+
printf("%d Writer is trying to enter\n",i);
20+
sem_wait(&mutex_w);
21+
22+
printf("Writer %d writing to segment: \"%s\"\n", i,temp);
23+
strncpy(data,temp, SHM_SIZE);
24+
sem_post(&mutex_w);
25+
printf("%d Writer is leaving\n",i);
26+
return NULL;
27+
}
28+
29+
void *reader(void* param)
30+
{
31+
int i=(int)param;
32+
sem_wait(&mutex);
33+
readercount++;
34+
if(readercount==1)
35+
sem_wait(&mutex_w);
36+
sem_post(&mutex);
37+
printf("%d reader is inside\n",i);
38+
printf("Reader %d reading from segment:\"%s\"\n", i,data);
39+
usleep(3);
40+
sem_wait(&mutex);
41+
readercount--;
42+
if(readercount==0)
43+
{
44+
sem_post(&mutex_w);
45+
}
46+
sem_post(&mutex);
47+
printf("%d Reader is leaving\n",i);
48+
return NULL;
49+
}
50+
51+
52+
int main(int argc, char *argv[])
53+
{
54+
key_t key;
55+
int shmid;
56+
int mode;
57+
/* make the key: */
58+
if ((key = ftok("hello.txt", 'R')) == -1) /*Here the file must exist */
59+
{
60+
perror("ftok");
61+
exit(1);
62+
}
63+
64+
/* create the segment: */
65+
if ((shmid = shmget(key, SHM_SIZE, 0644 | IPC_CREAT)) == -1) {
66+
perror("shmget");
67+
exit(1);
68+
}
69+
70+
/* attach to the segment to get a pointer to it: */
71+
data = shmat(shmid, NULL, 0);
72+
if (data == (char *)(-1)) {
73+
perror("shmat");
74+
exit(1);
75+
}
76+
int i;
77+
int n2=5;
78+
int n1[n2];
79+
sem_init(&mutex,0,1);
80+
sem_init(&mutex_w,0,1);
81+
for(i=0;i<n2;i++)
82+
{
83+
pthread_create(&writerthreads[i],NULL,writer,(void *)i);
84+
pthread_create(&readerthreads[i],NULL,reader,(void *)i);
85+
}
86+
for(i=0;i<n2;i++)
87+
{
88+
pthread_join(writerthreads[i],NULL);
89+
pthread_join(readerthreads[i],NULL);
90+
}
91+
92+
93+
/* detach from the segment: */
94+
if (shmdt(data) == -1) {
95+
perror("shmdt");
96+
exit(1);
97+
}
98+
/* delete the segment:
99+
if (shmctl(shmid,IPC_RMID,NULL) == -1) {
100+
perror("shmdt");
101+
exit(1);
102+
}
103+
*/
104+
return 0;
105+
}
106+

Intermediate/q6.c

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
#include<stdio.h>
2+
#include<stdlib.h>
3+
#include<pthread.h>
4+
#include<semaphore.h>
5+
#include<unistd.h>
6+
7+
#define N 5
8+
#define LEFT i
9+
#define RIGHT (i+1) % N
10+
sem_t room;
11+
sem_t forks[5];
12+
void * philosopher(void * num)
13+
{
14+
int i=*(int *)num;
15+
16+
sem_wait(&room);
17+
printf("\nPhilosopher %d has entered room",i+1);
18+
sem_wait(&forks[LEFT]);
19+
sem_wait(&forks[RIGHT]);
20+
21+
printf("\nPhilosopher %d is eating with %d and %d fork",i+1,LEFT,RIGHT);
22+
sleep(2);
23+
24+
sem_post(&forks[RIGHT]);
25+
sem_post(&forks[LEFT]);
26+
printf("\nPhilosopher %d is thinking",i+1);
27+
sem_post(&room);
28+
}
29+
30+
31+
int main()
32+
{
33+
int i,a[5];
34+
pthread_t tid[5];
35+
36+
sem_init(&room,0,4);
37+
38+
for(i=0;i<5;i++)
39+
sem_init(&forks[i],0,1);
40+
41+
for(i=0;i<5;i++){
42+
a[i]=i;
43+
pthread_create(&tid[i],NULL,philosopher,(void *)&a[i]);
44+
}
45+
for(i=0;i<5;i++)
46+
pthread_join(tid[i],NULL);
47+
return 0;
48+
}

0 commit comments

Comments
 (0)