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