#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#include <sys/shm.h>

#include <stdio.h>


#define CANCOMMUNICATOR_TYPE 7
#define MESSAGE_QUIT 0
#define MESSAGE_DATA 1

struct CANCOMMUNICATOR_MSG
{
  long type;
  int message;
}cancommunicator_msg;




void main(void)
{
  key_t cancommunicator_msgq_key;
  key_t cancommunicator_shm_key;


  cancommunicator_msgq_key=ftok("../CanCommunicator",0);
  cancommunicator_shm_key=ftok("../CanCommunicator",1);


  int cancommunicator_msgq_id=msgget(cancommunicator_msgq_key,IPC_CREAT|0666);

  int cancommunicator_shm_id=shmget(cancommunicator_shm_key,sizeof(int),IPC_CREAT|0666);
  int *data=(int*)shmat(cancommunicator_shm_id,0,0);

  FILE* data_file=fopen("data.txt","w+");
  
  while(1)
    {

      msgrcv(cancommunicator_msgq_id,&cancommunicator_msg,sizeof(CANCOMMUNICATOR_MSG)-sizeof(long),CANCOMMUNICATOR_TYPE,0);
      
      if (cancommunicator_msg.message==MESSAGE_QUIT) 
	{
	  fclose(data_file);
	  shmdt((void*)data);
	  return 0;
	}
      
      if (cancommunicator_msg.message==MESSAGE_DATA)
	{
	  fprintf(data_file,"%d\n",(*data));
	  printf("writting data: %d\n",(*data));
	}
    }
      
      


}
