Ragazzi ma l'unico modo per Serializzare tipi di dati semplici e complessi è l'uso del funzioni fread e fwrite?
Ragazzi ma l'unico modo per Serializzare tipi di dati semplici e complessi è l'uso del funzioni fread e fwrite?
C/C++
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 :-)
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
mi riferivo a quello che ha detto ibykos.
Io so che ci sono anche funzioni di basso livello come
int open..close
C/C++
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); }
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))