I. Shared Memory in Unix Using C Programming

SHARED MEMORY

#include<sys/ipc.h>
#include<sys/sem.h>
int main()
{
int id,semid,count=0,i=1,j;
int *ptr;
id=shmget(8078,sizeof(int),IPC_CREAT|0666);
ptr=(int *)shmat(id,NULL,0);
union semun
{
int val;
struct semid_ds *buf;
ushort *array;
}u;
struct sembuf sem;
semid=semget(1011,1,IPC_CREAT|0666);
ushort a[1]={1};
u.array=a;
semctl(semid,0,SETALL,u);
while(1)
{
sem.sem_num=0;
sem.sem_op=-1;
sem.sem_flg=0;
semop(semid,&sem,1);
*ptr=*ptr+1;
printf("process id:%d countis :%d \n",getpid(),*ptr);
for(j=1;j<=1000000;j++)
{
sem.sem_num=0;
sem.sem_op=+1;
sem.sem_flg=0;
semop(semid,&sem,1);
}
}
shmdt(ptr);

}

OUTPUT

$./sd
process id:4568 countis :1012310 
process id:4568 countis :1012311 
process id:4568 countis :1012312 
process id:4568 countis :1012313 
process id:4568 countis :1012315 
process id:4568 countis :1012317 
process id:4568 countis :1012319 
process id:4568 countis :1012321 

$ ./sd
process id:4607 countis :1012322 
process id:4607 countis :1012324 
process id:4607 countis :1012326 
process id:4607 countis :1012328 
process id:4607 countis :1012330 
process id:4607 countis :1012332 
process id:4607 countis :1012334