Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: bash en 29 Mayo 2015, 11:41 am



Título: parsear un xml ,en c puro , Recomendaciones ?
Publicado por: bash en 29 Mayo 2015, 11:41 am
hola a todos !!
Disculpen a este novato que tiene este foro a mil con tatnas preguntas pero de verdad me interesa aprender
y gracias a ustedes lo estoy logrando , bueno ahora lo que quiero es partsear un xml  ose eleminar un tag en algun sitio dentro del documento. yo se que me haran un pregunta , despues de ver el codigo , estoy en un entorno donde solo tengo open, write ,read y close de unix  el programa compila pero me da segmentation fault (core dumped ) , me pasa muy a menudo pero esta vez cuando trato de leer la cantidad de bytes con read que deberia. bueno pongo el codigo a ver si me doy a entender.
este seria el xml
Código
  1. <xml>
  2. <tag>
  3.  m texyo de be ser
  4. ffgfgf
  5. fgfhfhfh
  6. hf hhf hf hf hfh
  7. gh hghg gh ghghg
  8. gh ghgh
  9. </tag>
  10. </xml>


luego el codigo en c
Código
  1. #include <fcntl.h>
  2. #include <string.h>
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5. int main(int argc ,char argv[])
  6. {
  7.   int bucle =0;
  8.   char *pbuffer={'\0'};
  9.   int file = open("s.xml", O_RDONLY);
  10.   if(file < 0){
  11.      printf("Error Abriendo el fichero \n");
  12.      exit(1);///salida de error
  13.    }else{
  14.  
  15.     pbuffer = NULL;
  16.     int r = read(file, 1024);
  17.     printf("cantidad de bytes leidos :\n %d", r);
  18.     close(file);  
  19.     char *sin= strstr(pbuffer, "<tag>");
  20.     pbuffer = NULL;
  21.     while(sin[5+bucle] != '<')
  22.     {
  23.       strncat(pbuffer, &sin[5+bucle],1);
  24.        bucle++;
  25.     }  
  26.  
  27.     int s2 = open("copia.xml", O_WRONLY|O_TRUNC);
  28.     if(s2 < 0){
  29.       printf("Error @");
  30.      int d=  write(sin, 1024);
  31.      printf("cantidad de bytes escritos : %d", d);
  32.      close(s2);
  33.     }
  34.    }///else??
  35.  
  36.  
  37. }


segun la documentacion de unix ,cuando trate de leer o escribir tantos n-bytes en el o desde el buffer y tengas disponible menos eso es lo que te devolvera o me equivoco ?
gracias de anteamano. igual quisiera leer una estructura completa pero esta fuera del scope ahora me preocupa ese error.


Título: Re: parsear un xml ,en c puro , Recomendaciones ?
Publicado por: bash en 29 Mayo 2015, 14:09 pm
   lseek(data1, 1, SEEK_CUR);
       lectura = read(data1,buffer, 1);
       if(lectura == -1 || lectura == 0){
          sp_debug(("o se llego al final del fichero o hay un error de lectura"));
       }else sp_debug(("cantidad de bytes leidos en la lectura es : %d", lectura));
        strncat(&bufferEscritura, &buffer[indice], 1);
        indice++;
         esc = write(data2, &bufferEscritura, 1);
         sp_debug(("bytes Escritos"));
         lseek(data2, 1, SEEK_CUR);
    }