Exemple #1
0
/**
 * Close a bus
 * 
 * @param   bus  Bus information
 * @return       0 on success, -1 on error
 */
int
bus_close(bus_t *bus)
{
	bus->sem_id = -1;
	if (bus->message)
		t(close_shared_memory(bus));
	bus->message = NULL;
	return 0;

fail:
	return -1;
}
Exemple #2
0
int main(int argc, char *argv[])
{ int sig=-1;
 int pid=-1; 
 char *in; 
   sigNameStruct *sigNamePtr = sigNames;
  if  (argc < 3 || argv[1][0] != '-') {
  USAGE:
    fprintf(stderr,"Sample usage: winkill -INT 232423, to interrupt the process 232423 ");
    {int i = 0;
    fprintf(stderr,"\nargv[1][0]=%c,%d",argv[1][0],argv[1][0]);
    fprintf(stderr,"\nCalled with: argc=%d <",argc);
    while (i < argc) fprintf(stderr, " %s",argv[i++]);
    fprintf(stderr,">\n");
    }
    exit(1);
  }
  in = &(argv[1][1]);
  if (sscanf(&(argv[1][1]),"%d",&sig)==0) {
    while(sigNamePtr->name) {
      if (strcmp(sigNamePtr->name,in)==0) {
	sig = sigNamePtr->signumber;
	break;
      }
      sigNamePtr++;
    }
  }
  if (sig<0)
    {
     
      fprintf(stderr,"[had sig=%d]\n", sig);
       goto USAGE;
    
    }
  if (sscanf(argv[2],"%d",&pid)!=1 )
    {
  fprintf(stderr,"sscanf(argv[2],\"%d\",&pid) failed for %s,%d",
argv[2],atoi(argv[2]));
   goto USAGE;
    }
  
  sprintf(sharedMemory.name,"gcl-%d",pid);
  { 
    int value;
    int *at;
    value = signal_mask(sig);
    

    sharedMemory.handle = OpenFileMapping(FILE_MAP_WRITE, /*  Read/write permission.   */
			       FALSE,                     /*  Do not inherit the name  */
			       sharedMemory.name);           /*  of the mapping object.   */
 
    if (sharedMemory.handle == NULL) 
      { 
	ErrorHandler("winkill: Could not open file-mapping object."); 
      } 
 
    sharedMemory.address = MapViewOfFile(sharedMemory.handle, /* Handle to mapping object.  */
				 FILE_MAP_WRITE,               /* Read/write permission.  */
				 0,                                 /* Max.  object size.  */
				 0,                                 /* Size of hFile.  */
				 0);                                /* Map entire file.  */
 
    if (sharedMemory.address == NULL) 
      { 
	ErrorHandler("winkill: Could not map view of file."); 
      }
    at = (int *)(sharedMemory.address);
    *at |= value;
    close_shared_memory();

    exit(0);
  }

    
}
Exemple #3
0
void close_shared_memory1()
{
  refcount=0;
  close_shared_memory(NULL);
}
Exemple #4
0
int main(int argc, char** argv)
{
	if (argc < 2) {
		fprintf(stderr, "Too few arguments given to server.\n./server N\n");
		exit(EXIT_FAILURE);
	}
	
	int server_id = atoi(argv[1]);
	pdecryptf_t decrypt = choose_decryption(server_id);
	
	char mq_name[13];
	sprintf(mq_name, "/mq_server_%d", server_id);
	mqd_t mq = open_msg_queue(mq_name);
	
	Command cmd;
    int ret = receive_command(mq, &cmd);
    if (ret == -1)
    	exit(EXIT_FAILURE);
    Command *command = &cmd;
	
	mqd_t ret_mq;
	while(strcmp(command->name, "exit") != 0) {
		
		//open shared memory
		char* shm_name = command->name;
		int shm_size = command->dim;
		int shm_fd;
		void* mem = open_shared_memory(shm_name, shm_size, &shm_fd);
		if (mem == NULL) {
			exit(EXIT_FAILURE);
		}
		
		// get size of the message from the first 
		// integer in the shared memory
		int dim_message;
		memcpy(&dim_message, mem, sizeof(int));
		
		// decrypt message
		void* out = malloc(1000);
		int decrypt_size = decrypt(mem+sizeof(int), dim_message, out);
		
		// copy result back in shared memory
		memcpy(mem, &decrypt_size, sizeof(int));
		memcpy(mem + sizeof(int), out, decrypt_size);
		
		// Close shared memory
		close_shared_memory(mem, shm_size, shm_fd, shm_name);
		
		// Send message back to gateway with self removed
		int i;
		for (i = 1; i < 17; i++)
			command->crypt[i-1] = command->crypt[i]; 
		ret_mq = open_msg_queue(MQ_GATEWAY);
		ret = send_command(ret_mq, command);
		if (ret == -1)
    		exit(EXIT_FAILURE);
		mq_close(ret_mq);
		
		// Get another message from the mq
		ret = receive_command(mq, command);
		if (ret == -1)
    		exit(EXIT_FAILURE);
	}
	mq_close(mq);
	mq_close(ret_mq);
    return 0;
}