Listing 1: Prototypes for shared memory access routines


/*  Shared  memory  descriptor  */
typedef  struct  {
  void      *addr;   /*  Memory  address  */
  int       key;     /*  Shared  memory's  key  */
  int       shmid;   /*  Shared  memory's  ID  */
  int       size;    /*  Size  of  shared  memory  */
  int       mode;    /*  mode  ==  0  :  cannot  write  in  memory  */
  int       pin;     /*  if  TRUE,  pin  shared  memory  */                        
  int       offset;  /*  current  pointer  (modified  by  smSeek()  )  */
  FILE      *tmp;    /*  temporary  file  for  new  shared  memory  */
  time_t    time;    /*  time  of  last  modification  */
  }  SMEM;  
          
#define  shm_seek(smd,Offset)  \
    (NULL  ==  (smd)  ?  -1  :  ((smd)->offset  +=  Offset))

#define  shm_rewind(smd)  (NULL  ==  (smd)  ?  -1  :  ((smd)->offset  =  0))

#define  shm_eof(smd)  \
    (smd  ==  NULL  ?  -1  :  ((smd->offset  >=  smd->size)  ?  1  :  0  ))
SMEM  *shm_open(int  key,  const  char  *mode);
int      shm_read(void  *buffer,    int  size,  int  n_elem,  SMEM  *smd);
int      shm_write(void  *buffer,  int  size,  int  n_elem,  SMEM  *smd);
int      shm_close(SMEM  *smd);
/* End of File */