int main() { listdir("recursos/"); int ta = total_archivos(); printf("Total Archivos guardados: %i\n",ta); procesarArchivos(); return 0; }
//**********MAIN**********// void main() { FILE *pfEmp,*pfEst; printf("ARCHIVO EMPLEADOS\n"); abrirArchivo(&pfEmp,"C:\\ArchProII\\empleados.dat","r+b"); mostrarArchivoEmp(pfEmp); printf("\n\nARCHIVO ESTUDIANTES\n"); abrirArchivo(&pfEst,"C:\\ArchProII\\estudiantes.dat","rb"); mostrarArchivoEst(pfEst); procesarArchivos(pfEmp,pfEst); printf("\n\n**********ARCHIVO MODIFICADO**********\n"); mostrarArchivoEmp(pfEmp); fclose(pfEmp); fclose(pfEst); }
void escucha(int puerto) { int myPID = process_get_thread_id(); log_info(LOGGER, "************** Comienza a escuchar MaRTA a los Jobs (PID: %d) ***************",myPID); //Logica principal para administrar conexiones fd_set master; //file descriptor list fd_set read_fds; //file descriptor list temporal para el select() int fdmax; //maximo numero de file descriptor para hacer las busquedas en comunicaciones int listener;//socket escucha int newfd;//file descriptor del cliente aceptado struct sockaddr_storage remoteaddr; //dirección del cliente socklen_t addrlen; char remoteIP[INET6_ADDRSTRLEN]; int i; // socket entrante struct addrinfo hints; FD_ZERO(&master); //clear the master FD_ZERO(&read_fds); //clear the temp set //Lleno la estructura de tipo addrinfo memset(&hints, 0, sizeof hints); hints.ai_family = AF_UNSPEC; hints.ai_socktype = SOCK_STREAM; hints.ai_flags = AI_PASSIVE; t_socket_info socketInfo; socketInfo.sin_addr.s_addr = INADDR_ANY; socketInfo.sin_family = AF_INET; socketInfo.sin_port = htons(puerto); memset(&(socketInfo.sin_zero), '\0', 8); listener = crearSocket(); bindearSocket(listener, socketInfo); // listen turns on server mode for a socket. if (listen(listener, 10) == -1) { perror("listen"); exit(3); } // add the listener to the master set FD_SET(listener, &master); // keep track of the biggest file descriptor fdmax = listener; // so far, it's this one for(;;){ read_fds = master; // copy it if (select(fdmax+1, &read_fds, NULL, NULL, NULL) == -1) { perror("select"); exit(4); } // run through the existing connections looking for data to read for(i = 0; i <= fdmax; i++) { if (FD_ISSET(i, &read_fds)) { // we got one!! if (i == listener) { // handle new connections addrlen = sizeof remoteaddr; newfd = accept(listener, (struct sockaddr *) &remoteaddr, &addrlen); if (newfd == -1) { log_error(LOGGER, string_from_format( "Hubo un error en el accept para el fd: %i", i)); } else { FD_SET(newfd, &master); // add to master set if (newfd > fdmax) { // keep track of the max fdmax = newfd; } //Shows the new connection administrated log_info(LOGGER, string_from_format( "selectserver: new connection from %s on socket %d\n", inet_ntop(remoteaddr.ss_family, get_in_addr( (struct sockaddr*) &remoteaddr), remoteIP, INET6_ADDRSTRLEN), newfd)); } } else { header_t header; initHeader(&header); log_info(LOGGER, "Esperamos recibir mensajes de los Jobs"); if(recibir_header_simple(i, &header) != EXITO){ log_error(LOGGER, "Error al recibir header. Considero que viene de un cliente que se cayó"); header.tipo = ERR_CONEXION_CERRADA; } log_info(LOGGER, "Mensaje recibido! Header: %s", getDescription(header.tipo)); switch(header.tipo){ case ERR_CONEXION_CERRADA: close(i); FD_CLR(i, &master); job_eliminar(i, header); break; case JOB_TO_MARTA_FILES: // agrego el job a la lista sincronizada, gestiono las estructuras y blah job_agregar(i, header); // le pido al fs los bloques de los archivos del job y actualizo el job de la lista procesarArchivos(i, header); break; case JOB_TO_MARTA_MAP_OK: notificarMapOk(i, header); break; case JOB_TO_MARTA_MAP_ERROR: notificarMapError(i, header); break; case JOB_TO_MARTA_REDUCE_OK: notificarReduceOk(i, header); break; case JOB_TO_MARTA_REDUCE_ERROR: notificarReduceError(i, header); break; default: log_error(LOGGER, "ERROR mensaje NO RECONOCIDO (%d) !!\n", header); } } } } } }