Título: Serializacion en C!!
Publicado por: ekys en 14 Abril 2011, 08:55 am
Hola a todos,
me gustaría que alguien me ayudara.
El caso es q estoy intentando serializar una estructura definida por mí (basicamente es una estructura en arbol dnd cada nodo tiene un string y un entero) y lo estoy haciendo en C (sí en C, ni C# ni C++) y para ello utilizo la libreria c11n. Sigo las intrucciones del manual pero no hay manera!!!!!
Alguien ha trabajado alguna vez con esta librería (segun dicen es parecida a la libreria s11n utilizada en C++)??
Algun tipo de ayuda para digerir mi desesperacion??
Gracias de antemano por cualquier tipo de ayuda.
Título: Re: Serializacion en C!!
Publicado por: D4RIO en 14 Abril 2011, 19:42 pm
Si posteas algo de código podría ayudar a entender. De otra forma no sabríamos en qué parte tienes problemas, o qué problemas tienes. Usa la etiqueta de código personalizado disponible a la derecha arriba de tu panel de edición para postear código. Saludos.
Título: Re: Serializacion en C!!
Publicado por: ekys en 16 Abril 2011, 02:54 am
Si si, pongo el código ahora, pero es q he posteao en otros foros con el codigo incluido y nadie me contesta nunca... :P Gracias por contestar!!! Este es el codigo: //*****************************MAIN.c*************************************
#include <string.h> #include <stdio.h> #include <stdlib.h> #include "AST.h" #include "c11n.h" #include "c11n_io.h" #include "c11n_stream_FILE.h"
/// Main program int main(int argc,char *argv[]) { AST* a1=NULL; a1 = InsertAST(a1, "prueba");
c11n_node * n = c11n_node_create("a1"); bool rc = c11n_serialize( AST_c11n, n, &a1); c11n_node_destroy( n ); if( ! rc ) printf("SERIALIZE error !!!!!");
c11n_stream *str= c11n_stream_for_filename("a1.c11n", true); bool rc2 = c11n_save_serializable( str, AST_c11n, &a1 ); c11n_serializable_save( str, AST_c11n, &a1, 0 );
str->api->destroy(str); return 0; }
//*****************************AST.h*************************************
#include "c11n.h"
typedef struct bnode AST;
//AST definitions FIELDs struct bnode { char widget_name[20]; int count; AST *left; AST *right; };
AST* InsertAST ( AST* root, char* nodename);
extern const c11n_marshaller * AST_c11n;
//*****************************AST.c*************************************
#include "AST.h"
AST* InsertAST ( AST* root, char* nodename) { if ( root == NULL ) { root = malloc ( sizeof ( AST ) ); strcpy ( root->widget_name, nodename ); root->count = 1; root->left = root->right = NULL; } else if ( strcmp (nodename, root->widget_name ) < 0 ){ //else if ( root->left == NULL) root->left = InsertAST ( root->left, nodename); } else if ( strcmp (nodename, root->widget_name ) > 0 ){ root->right = InsertAST ( root->right, nodename); } else{ // must be equal root->count++; }
return root; }
static const c11n_marshaller_api c11n_markshaller_api_AST = C11N_MARSHALLER_API_INIT("AST", NULL, NULL, NULL, NULL, NULL);
static const c11n_marshaller AST_c11nX = { &c11n_markshaller_api_AST }; const c11n_marshaller * AST_c11n = &AST_c11nX;
|