Visualizzazione dei risultati da 1 a 7 su 7

Discussione: [ C ] Serializzazione

  1. #1
    Utente di HTML.it L'avatar di C232
    Registrato dal
    Dec 2004
    Messaggi
    303

    [ C ] Serializzazione

    Ragazzi ma l'unico modo per Serializzare tipi di dati semplici e complessi è l'uso del funzioni fread e fwrite?
    C/C++

  2. #2
    Utente di HTML.it L'avatar di ibykos
    Registrato dal
    Feb 2005
    Messaggi
    201
    Esistono altre funzioni, chiamate siystem call, che fanno un lavoro più sporco delle fread e fwrite.
    In ambiente UNIX (che consiglio a tutti coloro che vogliono programmare in C) sono disponibili le funzioni read() e write() in grado di leggere da files blocchi di dimensioni variabili a scelta dell'utente.
    Esistono anche funzioni per definire i buffer degli stream (come setbuf o setvbuf) ma tutta la trattazione sarebbe troppo complessa per un post :-)

  3. #3
    Utente di HTML.it L'avatar di anx721
    Registrato dal
    Apr 2003
    Messaggi
    2,352
    io penso ke lui cercasse dei modi per scrivere e leggere dati complessi a piu alto livello non a piu bassi livello, un po come si puo fare in java con la serializzazione, ma non penso proprio ke si possa fare

    Sun Certified Java Programmer

    EUCIP Core Level Certified

    European Certification of Informatics Professionals

  4. #4
    Utente di HTML.it L'avatar di ibykos
    Registrato dal
    Feb 2005
    Messaggi
    201
    ops :-) scusate

  5. #5
    Utente di HTML.it L'avatar di C232
    Registrato dal
    Dec 2004
    Messaggi
    303

    ...

    mi riferivo a quello che ha detto ibykos.
    Io so che ci sono anche funzioni di basso livello come
    int open..close
    C/C++

  6. #6
    Ciao,

    read e write in C serializzano bene.

    Ad esempio penserei ad una cosa del tipo
    codice:
    #include <stdio.h>
    #include <io.h>
    #include <string.h>
    #include <fcntl.h>
    #include <sys/stat.h>
    
    #define SERIALIZE_OR_DIE(fd, x) ( write(fd, &x, sizeof(x)) \
    				==	sizeof(x) || close(fd) && exit(1))
    
    #define UNSERIALIZE_OR_DIE(fd, x) (read(fd, &x, sizeof(x)) \
    				== 	sizeof(x) || close(fd) && exit(1))
    
    typedef struct _Type{
    	char a[100];
    	int b;
    } Type;
    
    int main()
    {
    	int fd;
    	Type t, u;
    	int n, o;
    
    	strcpy(t.a, "test");
    
    	t.b = 2;
    	n = 3;
    
    	fd = open("data",	O_BINARY | O_TRUNC | O_CREAT | O_RDWR , 
    						S_IREAD | S_IWRITE );
    	fd == -1 && exit(1);
    
    	SERIALIZE_OR_DIE (fd, t);
    	SERIALIZE_OR_DIE (fd, n);
    
    	lseek(fd, 0L, SEEK_SET)  == 0 || exit(1);
    
    	UNSERIALIZE_OR_DIE (fd, u);
    	UNSERIALIZE_OR_DIE (fd, o);
    
    	close(fd);
    
    	printf("%s %d %d\n", u.a, u.b, o);
    }

  7. #7
    ehm ...
    codice:
    #define SERIALIZE_OR_DIE(fd, x) ( write(fd, &x, sizeof(x)) \
    				==	sizeof(x) || close(fd) + exit(1))
    
    #define UNSERIALIZE_OR_DIE(fd, x) (read(fd, &x, sizeof(x)) \
    				== 	sizeof(x) || close(fd) + exit(1))

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.