示例#1
0
文件: mensaje.c 项目: JoelCa/SO1
DescriptorColas* nueva_cola_mensaje(int worker, char tipo)
{
  DescriptorColas *cola = (DescriptorColas*)calloc(1, sizeof(DescriptorColas));

  switch(tipo) {
    case 'w':
      cola->worker = crear_cola(worker);
      break;

    case 'd':
      cola->disp = crear_cola((worker+NUM_WORKER)%(2*NUM_WORKER));
      break;
  }
  return cola;
}
示例#2
0
int main()
{
	int i;

	acabados=0;

	signal(SIGCHLD, enterrador);
	setlinebuf(stdout); /* Se asigna búfer de línea a stdout */
	cola1 = crear_cola(50);
	cola2 = crear_cola(51);
	for (i=0; i < SERVIDORES; i++) {
		if ((pid_servidores[i] = fork()) == 0) {
			servidor();
			exit(0);
		}
	}
	for(i=0; i < CLIENTES; i++) {
		if (fork() == 0 ) {
			cliente();
			exit(0);
		}
		usleep(10000);
	}
	while (acabados < CLIENTES) { /* Espera a clientes */
		pause();
	}
	for (i=0; i < SERVIDORES; i++) {
		printf("Matando servidor %d\n", pid_servidores[i]);
		kill(pid_servidores[i], SIGTERM);
	}
	while (acabados < (CLIENTES + SERVIDORES))  {
		pause();
	}
	destruir_cola(cola1);
	destruir_cola(cola2);
	return 0;
}
示例#3
0
int main(int argc, char *argv[])  {
   int ret=0;
   key_t key; 
   int idcola; 
   struct sucmsg qbuf; 

   printf("main():inicio servidor Cola de Mensajes!\n");
   printf("main():para salir envie señal SIGUSR2 a proceso %d\n",(int) getpid());
   printf("main():inicializo total de ventas de sucursales\n");
   // inicializo totales de ventas
   init(&ventas[0]);
   
   // capturar señal SIGUSR2
   if (signal(SIGUSR2,sig_salir) == SIG_ERR) fprintf(stderr,"main():Error capturando señal SIGUSR2\n");
   
   /* Create unique key via call to ftok() */ 
   printf("main():solicito clave ipc\n");
   key = obtener_clave(IPC_PATH, IPC_KEY); 

   /* Open the queue -create if necessary */ 
   printf("main():creo cola de mensajes con clave ipc\n");
   if ((idcola = crear_cola(key)) != -1) { 
      printf("main():quedo a la espera de mensajes en cola [%d]...\n",idcola);
      while(!salir) {
         // leo mensajes de tipo 1
         if ( recibir_msg(idcola,&qbuf,SUC_MSG_LEN,1L) != -1) {
            printf("main():recibi [%s] como peticion\n",qbuf.mtext);
         }
      }
      printf("main():fin recepcion de mensajes, borra cola [%d]\n",idcola);
      borrar_cola(idcola);
   } else {
      fprintf(stderr,"main():Error creando cola de mensajes\n"); 
      ret=1;
   } 
   printf("main():fin servidor  Cola de Mensajes! retorno=%d\n",ret);
   return ret;
}