int main(int argc, char** argv) { // verifica se um parametro foi passado, senao exibe a forma de uso if (!argv[1]){ mostraUso(); return 0; } // Procedimento que carrega os dados do arquivo em uma matriz int **matriz; int linhas, colunas; printf("Abrindo arquivo...\n"); matriz = (int **)carregaArquivo(argv[1], &linhas, &colunas); if (!matriz){ printf("ERRO: nao foi possivel abrir o arquivo %s\n", argv[1]); return 0; } // entrando no loop do menu int opcao; do{ // limpa a tela se o clear estiver disponível system("clear"); printf("Selecione uma opcao ou 0 para encerrar\n" \ "[1] - Salvar\n" \ "[2] - Limiarizar\n" \ "[3] - Inverter\n" \ "[4] - Media 3x3\n" \ "[5] - Mediana 3x3\n" \ "[6] - Numero de brancos\n" \ "======> "); scanf("%d", &opcao); switch(opcao){ case 0: break; case 1: printf("\nNome do novo arquivo (enter para sobrescrever): "); char caminho[20]; // workaround do buffer sujo getchar(); fgets(caminho, sizeof(caminho), stdin); if (caminho) salvaArquivo(caminho, matriz, linhas, colunas); else salvaArquivo(argv[1], matriz, linhas, colunas); teclaEnter(); break; case 2: limiarizar(matriz, linhas, colunas); mostraMatriz(matriz, linhas, colunas); break; case 3: inverter(matriz, linhas, colunas); mostraMatriz(matriz, linhas, colunas); break; case 4: if (media3x3(matriz, linhas, colunas)) mostraMatriz(matriz, linhas, colunas); break; case 5: if (mediana3x3(matriz, linhas, colunas)) mostraMatriz(matriz, linhas, colunas); break; case 6: printf("\nNumero de brancos: %d\n", nroBrancos(matriz, linhas, colunas)); // espera input do teclado teclaEnter(); break; default: printf("Opcao nao reconhecida"); teclaEnter(); break; } }while(opcao != 0); // liberacao de memoria desalocaMatriz(matriz, linhas); return 0; }
int main(int argc, char const *argv[]) { /* Verifica se o usuário digitou 5 parâmetros */ if (argc != 6) { mostraUso(); exit(EXIT_FAILURE); } /* Atribuição dos parâmetros */ n = atoi(argv[1]); /* <convidados> */ p = atoi(argv[2]); /* <minimo-alunos> */ t = atoi(argv[3]); /* <intervalo> */ r = atoi(argv[4]); /* <tempo-festa> */ s = atoi(argv[5]); /* <tempo-ronda> */ srand (time(NULL)); alunosNaFesta = alunosQueJaParticiparam = 0; /* Verifica se os parâmetros são valores válidos */ if (t < 0 || r < 0 || s < 0) { printf("Atenção! Os valores de <intervalo>, <tempo-festa> e <tempo-ronda> não devem ser negativos\n"); mostraUso(); exit(EXIT_FAILURE); } /* Cria vetor de threads para representar os alunos */ pthread_t *threadsAlunos = (pthread_t*) malloc(n * sizeof(pthread_t)); /* Cria uma thread para representar o segurança */ pthread_t threadSeguranca; /* Inicializa uma fila para representar a ordem de chegada dos alunos */ filaDeAlunos = malloc(n * sizeof(int)); if (filaDeAlunos == NULL) { printf("Falha ao alocar memória\n"); exit(EXIT_FAILURE); } inicioDaFila = fimDaFila = 0; /* Variáveis para índice, valores de retorno e id do aluno passado à thread */ int i, falhou, *idAluno; /* Inicialização do Mutex */ falhou = pthread_mutex_init(&mutex, NULL); if (falhou) { printf("Ocorreu um erro ao inicializar o mutex\n"); exit(EXIT_FAILURE); } /* Inicialização das theads dos alunos */ for (i = 1; i <= n; i++) { /* alocando novo ponteiro para um inteiro, a ser passado para a thread do aluno */ idAluno = (int*) malloc(sizeof(int*)); *idAluno = i; falhou = pthread_create(&(threadsAlunos[i]), /* pthread_t* tid */ NULL, /* const pthread_attr_t* attr */ aluno, /* void* (*start_routine)(void *) */ idAluno); /* void *arg. */ if (falhou) { printf("Ocorreu um erro ao criar as threads dos alunos!\n"); exit(EXIT_FAILURE); } } /* Inicialização da thread do segurança */ falhou = pthread_create(&threadSeguranca, /* pthread_t* tid */ NULL, /* const pthread_attr_t* attr */ seguranca, /* void* (*start_routine)(void *) */ NULL); /* void *arg. */ if (falhou) { printf("Ocorreu um erro ao criar a thread do segurança!\n"); exit(EXIT_FAILURE); } /* Espera as threads dos alunos e do segurança terminarem */ for (i = 0; i < n; i++) { pthread_join(threadsAlunos[i], NULL); } pthread_join(threadSeguranca, NULL); /* Termina a festa */ printf("Término de festa!\n"); exit(EXIT_SUCCESS); }