add share memory examples
This commit is contained in:
parent
026015ed25
commit
fc1ceaee8e
64
related_info/lab7/ipc/shmem/shmem_client.c
Normal file
64
related_info/lab7/ipc/shmem/shmem_client.c
Normal file
@ -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;
|
||||
}
|
62
related_info/lab7/ipc/shmem/shmem_server.c
Normal file
62
related_info/lab7/ipc/shmem/shmem_server.c
Normal file
@ -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;
|
||||
}
|
Loading…
Reference in New Issue
Block a user