Skip to content

Instantly share code, notes, and snippets.

@MarceloPincheira
Last active July 4, 2017 09:04
Show Gist options
  • Save MarceloPincheira/3a9bc6c8fccb77df010ac52fd17655c2 to your computer and use it in GitHub Desktop.
Save MarceloPincheira/3a9bc6c8fccb77df010ac52fd17655c2 to your computer and use it in GitHub Desktop.
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <semaphore.h>
char rut[9];
int votantes, lista, listaA, listaB, nulos;
int i;
void *mostrar(void *param); //Hebra.
int main(int argc, char** argv){
lista = 0;
listaA = 0;
listaB = 0;
nulos = 0;
votantes = 0;
pthread_t tid; //Identificador de la hebra.
pthread_attr_t attr; //Atributos de la hebra.
FILE *archivo;
archivo = fopen ( "LISTA", "r" );
pthread_attr_init(&attr); //Obtener atributos predeterminados
//INICIO LECTURA ARCHIVO
if (archivo==NULL) {
printf("¡Error! el archivo no fue abierto\n");
}else{
printf("ARHCIVO ABIERTO CORRECTAMENTE\n");
rewind(archivo);
while(feof(archivo) == 0){
fscanf(archivo, "%d", &votantes);
if((votantes > 0) && (votantes < 20)){
printf("CANTIDAD VOTANTES: %d\n", votantes);
if(votantes == 20){
printf("Se completo el numero de votantes por hoy\n");
}
listaA = listaB = nulos = 0;
for(i=0; i<votantes; i++){
fscanf(archivo, "%s %d", rut, &lista);
//printf("RUT %s LISTA %d\n", rut, lista);
pthread_create(&tid, &attr, mostrar, NULL); //Crear hebra.
pthread_join(tid,NULL); //Esperar a que la hebra termine.
if(lista == 1){
listaA++;
}else if(lista == 2){
listaB++;
}else{
nulos++;
}
}
printf("LISTA A %d LISTA B %d NULOS %d\n", listaA, listaB, nulos);
}else if(votantes == 0){
printf("No se registraron votantes\n");
}
else if(votantes > 20){
printf("Se superó el número de votantes por día\n");
}
}
}
fclose ( archivo );
return 0;
}
void *mostrar(void *param){
printf("%s votando...\n", rut);
pthread_exit(0);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment