parsear un xml ,en c puro , Recomendaciones ?

Iniciado por bash, 29 Mayo 2015, 11:41 AM

0 Miembros y 1 Visitante están viendo este tema.

bash

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 (xml) [Seleccionar]
<xml>
<tag>
 m texyo de be ser
ffgfgf
fgfhfhfh
hf hhf hf hf hfh
gh hghg gh ghghg
gh ghgh
</tag>
</xml>



luego el codigo en c
#include <fcntl.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
int main(int argc ,char argv[])
{
  int bucle =0;
  char *pbuffer={'\0'};
  int file = open("s.xml", O_RDONLY);
  if(file < 0){
     printf("Error Abriendo el fichero \n");
     exit(1);///salida de error
   }else{

    pbuffer = NULL;
    int r = read(file, 1024);
    printf("cantidad de bytes leidos :\n %d", r);
    close(file);  
    char *sin= strstr(pbuffer, "<tag>");
    pbuffer = NULL;
    while(sin[5+bucle] != '<')
    {
      strncat(pbuffer, &sin[5+bucle],1);
       bucle++;
    }  
   
    int s2 = open("copia.xml", O_WRONLY|O_TRUNC);
    if(s2 < 0){
      printf("Error @");
     int d=  write(sin, 1024);
     printf("cantidad de bytes escritos : %d", d);
     close(s2);
    }
   }///else??
 

}



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.
gracias por responder mis dudas

bash

   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);
    }
gracias por responder mis dudas