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
<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.
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);
}