《操作系统》的实验代码。
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

62 lines
1006 B

#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;
}