进程A:
#include<stdio.h>
#include<sys/types.h>
#include<sys/ipc.h>
#include<sys/shm.h>
#include<string.h>
int main(int argc, const char *argv[])
{
key_t key1 = ftok("homework.c",1);//创建key值
if(key1<0)
{
perror("ftok");
return -1;
}
printf("key1=%#x\n",key1);
key_t key2 = ftok("homework.c",2);//创建key值
if(key2<0)
{
perror("ftok");
return -1;
}
printf("key2=%#x\n",key2);
int shmid1=shmget(key1,128,IPC_CREAT|0664);//创建共享内存id号
if(shmid1<0)
{
perror("shmget");
return -1;
}
int shmid2=shmget(key2,128,IPC_CREAT|0664);//创建共享内存id号
if(shmid2<0)
{
perror("shmget");
return -1;
}
char *str=shmat(shmid1,NULL,0);//将共享内存1映射到用户空间当中
int *flag=shmat(shmid2,NULL,0);//将共享内存2映射到用户空间当中
strcpy(str,"1234567");
*flag=0;
while(1)
{
if(*flag==0)
{
sleep(1);
printf("str:%s\n",str);
*flag=1;
}
}
return 0;
}
进程B:
#include<stdio.h>
#include<sys/types.h>
#include<sys/ipc.h>
#include<sys/shm.h>
#include<string.h>
int main(int argc, const char *argv[])
{
key_t key1 = ftok("homework.c",1);//创建key值
if(key1<0)
{
perror("ftok");
return -1;
}
printf("key1=%#x\n",key1);
key_t key2 = ftok("homework.c",2);//创建key值
if(key2<0)
{
perror("ftok");
return -1;
}
printf("key2=%#x\n",key2);
int shmid1=shmget(key1,128,IPC_CREAT|0664);//创建共享内存id号
if(shmid1<0)
{
perror("shmget");
return -1;
}
int shmid2=shmget(key2,128,IPC_CREAT|0664);//创建共享内存id号
if(shmid2<0)
{
perror("shmget");
return -1;
}
char *str=shmat(shmid1,NULL,0);//将共享内存1映射到用户空间当中
int *flag=shmat(shmid2,NULL,0);//将共享内存2映射到用户空间当中
printf("program is running>>>>\n");
while(1)
{
if(*flag==1)
{
char *p=str;
char *q=str+strlen(str)-1;
char temp;
while(p<q)
{
temp=*p;
*p=*q;
*q=temp;
p++;
q--;
}
*flag=0;
}
}
return 0;
}