-
-
Save tosunkaya/104ba64fad538d249b178292998f8ce3 to your computer and use it in GitHub Desktop.
Shared Memory
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
* shm-client - client program to demonstrate shared memory. | |
*/ | |
#include <sys/types.h> | |
#include <sys/ipc.h> | |
#include <sys/shm.h> | |
#include <stdio.h> | |
#include <stdlib.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"); | |
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. | |
*/ | |
*shm = '*'; | |
exit(0); | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <sys/types.h> | |
#include <sys/ipc.h> | |
#include <sys/shm.h> | |
#include <stdio.h> | |
#include <stdlib.h> | |
#define SHMSZ 27 | |
main() | |
{ | |
char c; | |
int shmid; | |
key_t key; | |
char *shm, *s; | |
/* | |
* 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; | |
for (c = 'a'; c <= 'z'; c++) | |
*s++ = c; | |
*s = NULL; | |
/* | |
* 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); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment