//shmdata.h
struct shm_st
{
int flag; //0可读不可写,1可写不可读
char text[BUFSIZ];
};
//shmwrite.c
#include <stdio.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include "shmdata.h"
#include <memory.h>
int main()
{
void* writeAbc;
int shmId;
shmId = shmget(123, sizeof(struct shm_st), 0666|IPC_CREAT);
if(shmId < 0)
{
perror("shmget");
return -1;
}
writeAbc = shmat(shmId, NULL, 0);
if((void*)-1 == writeAbc)
{
perror("shmat");
return -1;
}
while(1)
{
if(1 == ((struct shm_st*)writeAbc)->flag)
{
memset(((struct shm_st*)writeAbc)->text, 0, BUFSIZ);
printf("please intput content to write to share memory\r\n");
scanf("%s", ((struct shm_st*)writeAbc)->text);
((struct shm_st*)writeAbc)->flag = 0;
if(0 == strcmp("quit", ((struct shm_st*)writeAbc)->text))
{
break;
}
}
sleep(2);
}
if(shmdt(writeAbc) < 0)
{
perror("shmdt");
return -1;
}
return 0;
}
//shmread.c
#include <stdio.h>
#include "shmdata.h"
#include <sys/ipc.h>
#include <sys/shm.h>
int main()
{
void* readAbc;
int shmId;
shmId = shmget(123, sizeof(struct shm_st), 0666|IPC_CREAT);
if(shmId < 0)
{
perror("shmget");
return -1;
}
readAbc = shmat(shmId, NULL, 0);
while(1)
{
if(0 == ((struct shm_st*)readAbc)->flag)
{
printf("%s\r\n", ((struct shm_st*)readAbc)->text);
if(0 == strcmp("quit", ((struct shm_st*)readAbc)->text))
{
break;
}
((struct shm_st*)readAbc)->flag = 1;
}
sleep(2);
}
if(shmdt(readAbc) < 0)
{
perror("shmdt");
return -1;
}
if(shmctl(shmId, IPC_RMID, NULL) < 0)
{
perror("shmctl");
return -1;
}
return 0;
}