Пример #1
0
int main(int argc, char** argv) {
    long id = 0;
    char *nombre;

    if (argc >= 3) {
        id = getLong(argv[1]);
        nombre = getString(argv[2]);

        fprintf(stdout, "\nGenerando Archivo %s con id %ld", nombre, id);
        comprimir(id, nombre);
        return EXIT_SUCCESS;
    } else {
        fprintf(stdout, "\nForma de uso: %s id nombre_archivo", argv[0]);
        return EXIT_FAILURE;
    }
}
Пример #2
0
int main(int argc, char *argv[])
{
	FILE *fpin, *fpout;
	struct nodo *raiz;
	struct tablaCod *tabla;
	struct header h;
	u16 v;
	int verbose=0, benchmark=0;
	double tiempo;


	printf("hufc v. 0.2.2 Compress/Expand files using Huffman coding\n");

	if (argc < 2)
	{
		printf("To see help, write: %s -h\n", argv[0]);
		exit(0);
	}

	// Mostrar la ayuda?
	if (ExistArg("-h", argc, argv))
	{
		sintaxis(argv[0]);
		exit(0);
	}

	// Modo verbose?
	if (ExistArg("-v", argc, argv))
		verbose=1;

	// Medir el tiempo de crc o de checksum?
	if (ExistArg("-b", argc, argv))
		benchmark=1;

	if ((fpin=fopen(argv[1], "rb")) == NULL)
	{
		perror("fopen: input file");
		exit(1);
	}

	// Leer crc o checksum?
	if (ExistArg("-r", argc, argv))
	{
		if (!isHuf(fpin))
			printf("%s: not in huf format!\n", argv[1]);
		else
		{
			switch (leerDetErr(fpin))
			{
				case USE_CCITT:
					printf("%s: crc = 0x%04X\n", argv[1], readcrcsum(fpin));
					break;

				case USE_CHECKSUM:
					printf("%s: checksum = 0x%04X\n", argv[1], readcrcsum(fpin));
					break;

				default:
					printf("%s: error detection not used\n", argv[1]);
			}
		}

		fclose(fpin);
		exit(0);
	}

	// Testear el fichero?
	if (ExistArg("-t", argc, argv))
	{
		if (!isHuf(fpin))
			printf("%s: not in huf format!\n", argv[1]);
		else
		{
			switch (testfile(fpin, leerDetErr(fpin)))
			{
				case FILE_OK:
					printf("%s: seems to be ok\n", argv[1]);
					break;

				case FILE_CORRUPTED:
					printf("%s: file corrupted!\n", argv[1]);
					break;

				default:
					printf("%s: error detection not used\n", argv[1]);
			}
		}

		fclose(fpin);
		exit(0);
	}

	// Descomprimir
	if (ExistArg("-x", argc, argv))
	{
		if (!isHuf(fpin))
		{
			printf("%s: not in huf format!\n", argv[1]);
			fclose(fpin);
			exit(0);
		}

		// Testeamos el fichero
		h.deterr=leerDetErr(fpin);
		if (testfile(fpin, h.deterr) == FILE_CORRUPTED)
		{
			printf("%s: file corrupted!\n", argv[1]);
			fclose(fpin);
			exit(0);
		}

		raiz=leerCabecera(fpin, &h);
		fpout=fopen(h.filename, "wb");
		if (fpout == NULL)
		{
			perror("fopen: output file");
			exit(1);
		}

		// Le damos al fichero sus permisos originales
		chmod(h.filename, h.permisos);
		descomprimir(fpin, fpout, raiz, &h, verbose);
	}

	// Comprimir
	else
	{
		if (verbose)
		{
			printf("Scanning file (this may take a while)... ");
			fflush(stdout);
		}
		calcularFreq(fpin, &raiz);
		if (verbose)
			printf("Done\n");
		raiz=crearArbolHuffman(raiz);
		tabla=crearTablaCod(raiz);

		if (ExistArg("-ccitt", argc, argv))
			h.deterr=USE_CCITT;
		else if (ExistArg("-sum", argc, argv))
			h.deterr=USE_CHECKSUM;
		else
			h.deterr=DONT_USE_ERR_DET;

		setHeaderPermisos(&h, argv[1]);
		setHeaderFileName(&h, argv[1]);
		fpout=fopen(getCompressedFileName(&h), "w+b");
		if (fpout == NULL)
		{
			perror("fopen: output file");
			exit(1);
		}

		escribirCabecera(fpout, &h, raiz);
		h.padding_bits=comprimir(fpin, fpout, tabla, verbose);
		escribirPadding(fpout, h.padding_bits);
		borrarTablaCod(tabla);
		fflush(fpout);

		switch (h.deterr)
		{
			case USE_CCITT:
				if (benchmark)
					tiempo=gettime();

				v=calculacrc(fpout);

				if (verbose)
					printf("   crc = 0x%04X\n", v);

				if (benchmark)
					printf("crc time: %g s\n", gettime()-tiempo);

				writecrcsum(fpout, v);
				break;

			case USE_CHECKSUM:
				if (benchmark)
					tiempo=gettime();

				v=calculasum(fpout, COMPRIMIR);

				if (verbose)
					printf("   checksum = 0x%04X\n", v);

				if (benchmark)
					printf("checksum time: %g s\n", gettime()-tiempo);

				writecrcsum(fpout, v);
				break;

			default:
				if (verbose)
					printf("\n");
		}
	}

	borrarArbolHuffman(raiz);
	fclose(fpin);
	fclose(fpout);

	return 0;
}
Пример #3
0
	int main(void){

		char *path = "/etc/proyecto_so_1/proy1.ini";
		char *line = NULL;
		size_t len = 0;
		ssize_t reading;
		openlog("ALERT_DAEMON", LOG_PID, LOG_DAEMON);

	 	FILE *fp;

	 	fp = fopen(path,"r");

	 	if (fp == NULL){
			syslog(LOG_ERR,"Fallo en la lectura del archivo de conf proy1.ini");
			closelog();
	    	exit(EXIT_FAILURE);
	      	//notificar por medio de syslog que no se encontro el proy1.ini
	 	}else{
			 	while(!feof(fp)){

	            	while ((reading = getline(&line, &len, fp)) != -1) {

	                	if(line[0] != ';'){

	                  		if(line[0] != '[' && line != NULL){
	                  			//printf("Linea %s\n",line);
	                  			char *buf;
	                  			buf = strsep(&line,"=");

	                  			if((strcmp(buf,"log_tag"))==0){
	                    			tag = strsep(&line,"\0");
	                  	
	                  			}

	                  			if((strcmp(buf,"interval"))==0){
	                    			buf = strsep(&line,"\0");
	                    			interval = atoi(buf);
	                  			
	                  			}
	                		}
	         			}
	       			}
	     		}
		}

		openlog(tag, LOG_PID, LOG_DAEMON);

		if ((lista = (Lista *) malloc (sizeof (Lista))) == NULL){
			syslog(LOG_ERR,"Error, no se pudo inicializar la lista");
	    	exit(EXIT_FAILURE);
	   	}

	   	incializacion(lista);




		while(1==1){

	  		sleep(interval);
	  		char *dir="/var/log";
	  		struct dirent *dp;
	  		DIR *fd;
	  		char  *val,**paragraph;
	  		paragraph = (char**)malloc(1*sizeof(char*));
	  		int position=0;

	  		if ((fd = opendir(dir)) == NULL) {
				
				syslog(LOG_INFO,"Error, no se pudo abrir el directorio /var/log");
	    		closelog();
	    		return;
	  		}

	  		while ((dp = readdir(fd)) != NULL) {

	 			if (!strcmp(dp->d_name, ".") || !strcmp(dp->d_name, ".."))
	    		continue;    /* skip self and parent */

	 			char *aux = get_filename_ext(dp->d_name);
	  			// printf("Val--------> %d type dir  %d  type file regular  %d\n ",dp->d_type,DT_DIR,DT_REG);
	   			if(dp->d_type == DT_REG){

	       			if(strcmp(aux,"gz")!=0){
						//agregar a la lista
	        			paragraph = ObtenerPalabras(dp->d_name,paragraph,position);
	        			position++;
	       			}
	   			}
	 		}


					(void) signal(SIGUSR1,manejadorDeSenales);
					int pos=0;

					//printf("Num pal %d\n",position);
					for(pos; pos < position; pos++){

						int i, fds[2];

						if (pipe(fds) == -1) {
							syslog(LOG_ERR,"Error, no se pudo crear la tuberia anonima");
							exit(EXIT_FAILURE);
						}

					 

							pmd5sum = fork();
							if (pmd5sum == 0) {

								hijo(fds,paragraph[pos]);
								kill(pmd5sum,SIGKILL);

							} else if (pmd5sum > 0) {
								/* tratamiento del padre */

					            papa(fds);
					            close(fds[0]);
						        close(fds[1]);
								kill(pmd5sum,SIGKILL);

							} else if (pmd5sum == -1) {

								syslog(LOG_ERR,"Error, fallo en la llamada fork");
								exit(EXIT_FAILURE);

							}

					    	/* tratamiento del padre una vez lanzado su hijo. */
					    	pmd5sum = wait(NULL);

							while (pmd5sum > 0) {
								pmd5sum = wait(NULL);
							}

							if (pmd5sum == -1 && errno != ECHILD) {
								syslog(LOG_ERR,"Error, fallo en la llamada wait");
								exit(EXIT_FAILURE);
							}

					}//fin for que crea hijos
                     // libero el paragragh
                     memset(paragraph,0,sizeof(char*)*position);
					 // visualizacion(lista);
					 // verifico si algun archivo cambio llamando a cambio ?
					char *namepak;
					int cambio = file_change(lista);

					if(cambio==1){//algun archivo cambio
						//procesar .pak
						namepak  = (char*)proccesingPak(lista);
					  	set_change(lista);

					  	pgzip = fork();
					    if (pgzip == 0) {

					          comprimir(namepak);
					          kill(pgzip,SIGKILL);

					    } else if (pgzip > 0) {
					      /* tratamiento del padre */

					    pgzip = wait(NULL);

					    while (pgzip > 0) {
					    	pgzip = wait(NULL);
					 	}


					    }else if (pgzip == -1) {
					    	syslog(LOG_ERR,"Error, fallo en fork");
					      	exit(EXIT_FAILURE);
					    }

					  	if (pgzip == -1 && errno != ECHILD) {
					    	syslog(LOG_ERR,"Error, fallo en wait");
					   		exit(EXIT_FAILURE);
					  	}

					}//FIN IF CAMBIO

	  	}//FIN WHILE TRUE
	}//FIN MAIN
Пример #4
0
/*!
    \fn Ebackup::generar_config()
    Genera un una copia de los valores de configuracion del programa y los prepara para la compresion.
 */
bool Ebackup::generar_config()
{
 preferencias *p = preferencias::getInstancia();
 // Obtengo todas las claves
 QStringList claves = p->allKeys();
 PBProgreso->setRange( 0, ( claves.size() * 2 ) + 2 );
 PBProgreso->setValue( 0 );
 // Genero los datos concatenando las variables
 // Inicio de preferencias
 // Cabecera de los datos
 datos->append("|->preferencias->");
 // bucle que recorre cada valor
 QStringList::const_iterator iterador;
 for( iterador = claves.constBegin(); iterador != claves.constEnd(); ++iterador )
 {
        if( !_continuar )
        { return false; }
   datos->append( (*iterador).toLocal8Bit().constData() );
   PBProgreso->setValue( PBProgreso->value() + 1 );
   datos->append( "=" );
   // Separador de valores
   QVariant v = p->value( (*iterador), QVariant() );
   QString result;
   switch( v.type() )
   {
        ///////////////////////////////////////////////////////////////////////////
        // Copiado desde la clase qsettings de qt
       case QVariant::Invalid:
       {
            result = QLatin1String("@Invalid()");
            break;
       }

        case QVariant::ByteArray:
        {
            QByteArray a = v.toByteArray();
            result = QLatin1String("@ByteArray(");
            result += QString::fromLatin1(a.constData(), a.size());
            result += QLatin1Char(')');
            break;
        }

        case QVariant::String:
        case QVariant::LongLong:
        case QVariant::ULongLong:
        case QVariant::Int:
        case QVariant::UInt:
        case QVariant::Bool:
        case QVariant::Double:
        case QVariant::KeySequence: {
            result = v.toString();
            if (result.startsWith(QLatin1Char('@')))
                result.prepend(QLatin1Char('@'));
            break;
        }
        case QVariant::Rect: {
            QRect r = qvariant_cast<QRect>(v);
            result += QLatin1String("@Rect(");
            result += QString::number(r.x());
            result += QLatin1Char(' ');
            result += QString::number(r.y());
            result += QLatin1Char(' ');
            result += QString::number(r.width());
            result += QLatin1Char(' ');
            result += QString::number(r.height());
            result += QLatin1Char(')');
            break;
        }
        case QVariant::Size: {
            QSize s = qvariant_cast<QSize>(v);
            result += QLatin1String("@Size(");
            result += QString::number(s.width());
            result += QLatin1Char(' ');
            result += QString::number(s.height());
            result += QLatin1Char(')');
            break;
        }
        case QVariant::Point: {
            QPoint p = qvariant_cast<QPoint>(v);
            result += QLatin1String("@Point(");
            result += QString::number(p.x());
            result += QLatin1Char(' ');
            result += QString::number(p.y());
            result += QLatin1Char(')');
            break;
        }
        default: {
            QByteArray a;
            {
                QDataStream s(&a, QIODevice::WriteOnly);
                s.setVersion(QDataStream::Qt_4_0);
                s << v;
            }

            result = QLatin1String("@Variant(");
            result += QString::fromLatin1(a.constData(), a.size());
            result += QLatin1Char(')');
            break;
        }
        //////////////////////////////////////////////////////////////////////////////
    }
    datos->append( result );
    PBProgreso->setValue( PBProgreso->value() + 1 );
   // Separador de preferencia
   datos->append( "\n" );
 }
 // fin de los datos
 datos->append("<-preferencias<-|");
 // Comprimo los datos y los envio al buffer de comprimidos
 LDebug->setText( LDebug->text() + "... Comprimiendo.... " );
 comprimir();
 PBProgreso->setValue( PBProgreso->value() + 1 );
 // Limpio el buffer asi se libera la memoria
 LDebug->setText( LDebug->text() + "... Limpiando.... " );
 datos->clear();
 PBProgreso->setValue( PBProgreso->value() + 1 );
 LDebug->setText( "Listo backup de configuracion" );
 return true;
}