63 lines
1006 B
C
63 lines
1006 B
C
|
#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;
|
||
|
}
|