I. Shared Memory in Unix Using C Programming

Shared Memory Example

/*Shared Memory Example In C */

#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);
}

Sample Output:


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