[C con Clase] Tamaño de Buffer

anonymous.mx anonymous.mx en gmail.com
Mie Jun 2 19:57:45 CEST 2010


Moises y Steven, gracias por la aportación.

Anexo el extracto del codigo. (no lo he compilado porque tenemos un pequeño
problema con el filesystem en donde se encuentran lo datos).

   tamanio = getfilesize(f1);
   fseeko64 (f1, 3200+17-1, SEEK_SET);
   fread (&int2, sizeof(int2), 1, f1);
   _si = entero2(int2)/1000000.;
   fseeko64 (f1, 3200+21-1, SEEK_SET);
   fread (&int2, sizeof(int2), 1, f1);
   _nsmp = entero2(int2);
   fseeko64 (f1, 3200+25-1, SEEK_SET);
   fread (&int2, sizeof(int2), 1, f1);
   _frmt = entero2(int2);
   if     (_frmt==3) _smpl=2;
   else if(_frmt==6) _smpl=1;
   else              _smpl=4;
   // Tama#o de la traza (bytes)
   _trl = 240+_nsmp*_smpl;
   // Numero de trazas
   _ntr=(tamanio-3600)/(_trl);
   //Crear el buffer
   unsigned char *_buffer = (unsigned char *) malloc( _ntr );
   // Escribir el encabezado del SEGY
   fseeko64 (f1, 0, SEEK_SET);
   bytesLeidos = fread(_binhed, 1, sizeof(_binhed), f1);
   fwrite(_binhed, 1, bytesLeidos, fs);
   for (n=1;n<=_ntr;n++)
   {
      fseeko64 (f1, 3600+((n-1)*_trl), SEEK_SET);
      fread (&_trched, sizeof(_trched), 1, f1);

      int4[0]=_trched[17-1];
      int4[1]=_trched[17-0];
      int4[2]=_trched[17+1];
      int4[3]=_trched[17+2];

      // Grabar el dato si el SP corresponde con el indicado en parametros.
      if (SP==entero4(int4))
      {
         fseeko64 (f1, 3600+((n-1)*_trl), SEEK_SET);
         bytesLeidos = fread(_buffer, 1, sizeof(_buffer), f1);
         fwrite(_buffer, 1, bytesLeidos, fs);
      }
   }
   // Liberar el buffer
   free( _buffer );

   /* Cerramos el fichero */
   fclose(f1);
   fclose(fs);


Saludos desde Villahermosa, Tabasco, Mexico, America, Tierra.
José Luis


2010/6/2 Moises Brenes <moises.brenes en gmail.com>

> 2010/6/2 Steven Davidson <srd4121 en njit.edu>:
> > Hola "anonymous" y Moisés,
>
> > Esto no es correcto. Ten presente que "anonymous" quiere que la cantidad,
> > que será un número entero, se pase como parámetro. Sin embargo, los
> > parámetros del programa son cadenas de caracteres. Por lo tanto, lo que
> se
> > tendría que hacer es convertir la cadena a un número entero y luego usar
> ese
> > número como la cantidad de elementos del "búfer". Esto es,
>
> Si, me falto ser mas claro, y no obviar que se debe convertir
>
> >
> > Espero haber aclarado la duda,
> >
> > Steven
>
> _______________________________________________
> Lista de correo Cconclase Cconclase en listas.conclase.net
> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20100602/ad927990/attachment.html>


Más información sobre la lista de distribución Cconclase