@ -0,0 +1,64 @@ | |||
#include <sys/types.h> | |||
#include <sys/ipc.h> | |||
#include <sys/shm.h> | |||
#include <stdio.h> | |||
#include <unistd.h> | |||
#include <string.h> | |||
#define SHMSZ 1024 | |||
main() | |||
{ | |||
int shmid; | |||
key_t key; | |||
char *shm, *s; | |||
/* | |||
* We need to get the segment named | |||
* "1234", created by the server. | |||
*/ | |||
key = 1234; | |||
/* | |||
* Locate the segment. | |||
*/ | |||
if ((shmid = shmget(key, SHMSZ, 0666)) < 0) { | |||
perror("shmget"); | |||
return 1; | |||
} | |||
/* | |||
* Now we attach the segment to our data space. | |||
*/ | |||
if ((shm = shmat(shmid, NULL, 0)) == (char *) -1) { | |||
perror("shmat"); | |||
return 1; | |||
} | |||
/* | |||
* Zero out memory segment | |||
*/ | |||
memset(shm,0,SHMSZ); | |||
s = shm; | |||
/* | |||
* Client writes user input character to memory | |||
* for server to read. | |||
*/ | |||
for(;;){ | |||
char tmp = getchar(); | |||
// Eat the enter key | |||
getchar(); | |||
if(tmp == 'q'){ | |||
*shm = 'q'; | |||
break; | |||
} | |||
*shm = tmp; | |||
} | |||
if(shmdt(shm) != 0) | |||
fprintf(stderr, "Could not close memory segment.\n"); | |||
return 0; | |||
} |
@ -0,0 +1,62 @@ | |||
#include <sys/types.h> | |||
#include <sys/ipc.h> | |||
#include <sys/shm.h> | |||
#include <stdio.h> | |||
#include <unistd.h> | |||
#include <string.h> | |||
#define SHMSZ 1024 | |||
main(int argc, char **argv) | |||
{ | |||
char c, tmp; | |||
int shmid; | |||
key_t key; | |||
char *shm, *s; | |||
/* | |||
* Shared memory segment at 1234 | |||
* "1234". | |||
*/ | |||
key = 1234; | |||
/* | |||
* Create the segment and set permissions. | |||
*/ | |||
if ((shmid = shmget(key, SHMSZ, IPC_CREAT | 0666)) < 0) { | |||
perror("shmget"); | |||
return 1; | |||
} | |||
/* | |||
* Now we attach the segment to our data space. | |||
*/ | |||
if ((shm = shmat(shmid, NULL, 0)) == (char *) -1) { | |||
perror("shmat"); | |||
return 1; | |||
} | |||
/* | |||
* Zero out memory segment | |||
*/ | |||
memset(shm,0,SHMSZ); | |||
s = shm; | |||
/* | |||
* Read user input from client code and tell | |||
* the user what was written. | |||
*/ | |||
while (*shm != 'q'){ | |||
sleep(1); | |||
if(tmp == *shm) | |||
continue; | |||
fprintf(stdout, "You pressed %c\n",*shm); | |||
tmp = *shm; | |||
} | |||
if(shmdt(shm) != 0) | |||
fprintf(stderr, "Could not close memory segment.\n"); | |||
return 0; | |||
} |