Made By: Saurav Kumar Reg. No.:16BIT0122 School: Site Course: Os Code: Ite2002 Slot: L41+L42
Made By: Saurav Kumar Reg. No.:16BIT0122 School: Site Course: Os Code: Ite2002 Slot: L41+L42
:16BIT0122
School: SITE Course: OS
Code: ITE2002 Slot: L41+L42
Assume that two processes named client and server running in the system. It is required that
these two processes should communicate with each other using shared memory concept. The
server writes alphabets from a..z to the shared memory .the client should read the alphabets
from the shared memory and convert it to A…Z. Write a program to demonstrate the above
mentioned scenario.
CLIENT:
/*
* shm-client - client program to demonstrate shared memory.
*/
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <stdio.h>
#define SHMSZ 27
main()
{
int shmid;
key_t key;
char *shm, *s;
/*
* We need to get the segment named
* "5678", created by the server.
*/
key = 5678;
/*
* Locate the segment.
*/
if ((shmid = shmget(key, SHMSZ, 0666)) < 0) {
perror("shmget");
This study source was downloaded by 100000828233848 from CourseHero.com on 02-22-2022 21:09:06 GMT -06:00
https://www.coursehero.com/file/27317485/OSLAB3pdf/
exit(1);
}
/*
* Now we attach the segment to our data space.
*/
if ((shm = shmat(shmid, NULL, 0)) == (char *) -1) {
perror("shmat");
exit(1);
}
/*
* Now read what the server put in the memory.
*/
for (s = shm; *s != NULL; s++)
putchar(*s);
putchar('\n');
/*
* Finally, change the first character of the
* segment to '*', indicating we have read
* the segment.
*/
for(i=65;i<=90;i++){
*shm = (char)i;
shm++;
}
exit(0);
}
This study source was downloaded by 100000828233848 from CourseHero.com on 02-22-2022 21:09:06 GMT -06:00
https://www.coursehero.com/file/27317485/OSLAB3pdf/
SERVER:
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <stdio.h>
#define SHMSZ 27
main()
{
char c;
int shmid;
key_t key;
char *shm, *s;
This study source was downloaded by 100000828233848 from CourseHero.com on 02-22-2022 21:09:06 GMT -06:00
https://www.coursehero.com/file/27317485/OSLAB3pdf/
/*
* We'll name our shared memory segment
* "5678".
*/
key = 5678;
/*
* Create the segment.
*/
if ((shmid = shmget(key, SHMSZ, IPC_CREAT | 0666)) < 0) {
perror("shmget");
exit(1);
}
/*
* Now we attach the segment to our data space.
*/
if ((shm = shmat(shmid, NULL, 0)) == (char *) -1) {
perror("shmat");
exit(1);
}
/*
* Now put some things into the memory for the
* other process to read.
*/
s = shm;
/*
* Finally, we wait until the other process
* changes the first character of our memory
* to '*', indicating that it has read what
* we put there.
*/
while (*shm != '*')
sleep(1);
exit(0);
}
This study source was downloaded by 100000828233848 from CourseHero.com on 02-22-2022 21:09:06 GMT -06:00
https://www.coursehero.com/file/27317485/OSLAB3pdf/
This study source was downloaded by 100000828233848 from CourseHero.com on 02-22-2022 21:09:06 GMT -06:00
https://www.coursehero.com/file/27317485/OSLAB3pdf/
Powered by TCPDF (www.tcpdf.org)