Esempio n. 1
0
/**
 * Comprueba los parámetros de entrada del sistema.
 * Entre las comprobaciones que realiza controla la cantidad, la validez y si algun parámetro esta repetido.
 * @param argc Cantidad de argumentos recibidos en la ejecución
 * @param argv Arreglo con los argumentos recibidos en la ejecución
 * @return Devuelve 1 si se comprueban los parámetros correctamente o 0 (cero) en otro caso
 */
int comprobarParametros(int argc, char *argv[])
{

	/*
	 * Datos de entrada
		-p nombre archivo		Para especificar archivo de procesos
		-io nombre archivo		Para especificar archivo de solicitudes de I/O de cada proceso
		-prec nombre archivo	Para especificar archivo precedencia de los procesos
	   Datos de salida
		-rs nombre archivo		Para especificar archivo de resultados a nivel sistema
		-rp nombre archivo		Para especificar archivo de resultados a nivel proceso
		-ev nombre archivo		Para especificar archivo de eventos tratados
	 */


	// Si solo envío un parámetro y ademas el parámetro es --help o -h
	if (argc == 2 && (!strcmp(argv[1],"--help") || !strcmp(argv[1],"-h")))
	{
		imprimirAyuda();
		return 0;
	}

	// Si se envío algun parámetro, estos tienen que venir "paramtero" "valor"
	// Por lo que si, restando el argv[0] la cantidad de parámetros es impar: error
	// O si la cantidad de parametros es mayor a 10: error
	if ((argc > 1 && (argc -1)  % 2 != 0) || argc > 10)
	{
		printf("Error: Cantidad de parámetros incorrectos.\n");
		imprimirAyuda();
		return 0;
	}
	int i;
	// Verifico que las opciones de parámetros sean válidas
	for (i=1; i<argc; i+=2)
	{
		if (strcmp(argv[i],"-p") && strcmp(argv[i],"-io") && strcmp(argv[i],"-prec") && strcmp(argv[i],"-rs") && strcmp(argv[i],"-rp") && strcmp(argv[i],"-ev"))
		{
			printf("Error: El parámetro %s es inválido!.\n",argv[i]);
			imprimirAyuda();
			return 0;
		}
	}

	// Verifico que no hay parámetros repetidos
	int j=1,k;
	while (j<argc)
	{
		k=j+2;
		while (k<argc && strcmp(argv[j],argv[k])) k+=2;
		if (k<argc)
		{
			printf("Error:  Parámetro %s repetido.\n",argv[j]);
			imprimirAyuda();
			return 0;
		}
		j+=2;
	}

	return 1;
}
Esempio n. 2
0
void evaluarArgumentos(int argc, char *argv[])
{
    int i = 0;
    char *nombresArchivos[maxcantArchivos];
    int cantArchivos = 0;
    bool LineasPorDefecto = true;
    int cantOpcionesTail = 0;


    for(i=1;i<argc;i++)                      /*buscamos los archivos*/
    {
            if (*argv[i] == '-')             //descartamos las opciones
            {
                    switch ( *(argv[i] +1) )
                    {
                            case caracteres:
                            i++;            //si es caracter descartamos su parametro k
                            cantOpcionesTail++;
                            break;

                            case lineas:    //si es linea descartamos su parametro k
                            cantOpcionesTail++;
                            i++;
                            break;
                    }
            }
            else
            {
                    nombresArchivos[cantArchivos++]  = argv[i];
            }
    }

    if(cantOpcionesTail > 1)  // solo puede haber una opcion de Tail caracter o linea
    {
        char* error_doble_funcionalidad = "\n error en los parametros, usar -n o -c pero no ambos \n";
        fputs(error_doble_funcionalidad,stderr);
        exit(EXIT_FAILURE);
    }


        for (i = 1;i<argc;i++)   //no contamos el argumento cero dado que es el programa, ni el ultimo porque es el archivo
        {
                if (*argv[i] == '-')
                    switch ( *(argv[i] +1) )
                    {
                            case ayuda:
                            imprimirAyuda();
                            exit(EXIT_SUCCESS);
                            break;

                            case version:
                            imprimirVersion();
                            exit(EXIT_SUCCESS);
                            break;

                            case caracteres:
                            validacionEntero(atoi(argv[i+1]));
                            tail(atoi(argv[i+1]),nombresArchivos,cantArchivos,false);
                            LineasPorDefecto = false;
                            break;

                            case lineas:
                            validacionEntero(atoi(argv[i+1]));
                            tail(atoi(argv[i+1]),nombresArchivos,cantArchivos,true);
                            LineasPorDefecto = false;
                            break;

                            default:
                            fputs("\n error la opcion del menu no es correcta: ayuda\n",stderr);
                            imprimirAyuda();    //imprimir ayuda en caso de parametros incorrectos
                            exit(EXIT_FAILURE);
                            break;
                    }
        }

        if(LineasPorDefecto == true)
            tail(cantLineasPorDefecto,nombresArchivos,cantArchivos,true);

}