Я пытался установить связь между двумя процессами, используя концепцию общей памяти. Но здесь, хотя я указывал адреса общей памяти разных переменных на разные файлы, они, похоже, связаны. Как только я изменяю значение одной переменной, новое значение также перезаписывается на другую переменную, в этом случае se1-> val и se2-> val выходят на связь. Может кто-нибудь помочь, почему так происходит?
#include<stdio.h>
#include<sys/types.h>
#include<sys/wait.h>
#include<unistd.h>
#include <sys/ipc.h>
#include <sys/sem.h>
#include <sys/shm.h>
#define s(t) scanf("%d",&t)
#define p(t) printf("%d ",t)
struct sem
{
int val;
int xy;
};
struct sem* se1;
struct sem* se2;
int main()
{
printf("You in P1\n");
key_t key1,key2;
key1=ftok("shmfile1",0);
key2=ftok("shmfile3",0);
int shmid1=shmget(key1, sizeof(struct sem),0644|IPC_CREAT);
int shmid2=shmget(key2, sizeof(struct sem),0644|IPC_CREAT);
se1=shmat(shmid1,NULL,0);
se2=shmat(shmid2,NULL,0);
se1->xy=4;
se2->xy=8;
se1->val=0;
se2->val=1;
int r=10;
while(r--)
{
printf("\nIn P1 process ");
while(se2->val==0);
se2->val--;
se1->xy=se2->xy+1;
se1->val++;
p(se1->xy);
p(se2->xy);
}
return 0;
}
Ожидается, что se1-> val и se2-> val приведут к результатам типа семафора, но из-за перезаписи это не происходит!