int main() { int numeroProcessosFilhos; Ponte *ponte_shared; int segment_id; pid_t child_pid; int indice; int child_status; printf("\n Digite o Numero de Criancas para atravessar a Ponte: "); scanf("%d", &numeroProcessosFilhos); if(numeroProcessosFilhos <= 0) { printf("\nO numero de criancas deve ser maior que zero\n\n"); return -1; } printf("\nCrianca \t Lado \t\t Estado \t NumTravessias \t tempoDecisao\n\n"); ponte_shared = ponte_create(); child_pid = gerarProcessosFilhos(numeroProcessosFilhos, ponte_shared, segment_id); if(!processoEhFilho(child_pid)) { esperarProcessosFilhosTerminarem(numeroProcessosFilhos); ponte_delete(ponte_shared); } return 0; }
Ponte * criarPonteComMemoriaCompartilhada(Ponte *ponte_shared_memory, int *segment_id) { struct shmid_ds shmbuffer; int segment_size; const int shared_segment_size = 0x6400; (*segment_id) = shmget ( IPC_PRIVATE, shared_segment_size, IPC_CREAT |IPC_EXCL | S_IRUSR |S_IWUSR ); //printf("segment_id: %d\n", (*segment_id)); ponte_shared_memory = shmat ( (*segment_id), 0, 0 ); //printf ( "Memoria compartilhada conectada no endereco: %p\n", ponte_shared_memory ); shmctl ( (*segment_id), IPC_STAT, &shmbuffer ); segment_size = shmbuffer.shm_segsz; //printf ( "Tamanho do segmento: %d bytes\n", segment_size ); ponte_shared_memory = ponte_create(); return ponte_shared_memory; }