Ik heb bijvoorbeeld deze struct:
Vervolgens wil ik dit opslaan in db formaat zoals beschreven staat in de manual van Berkeley DB:
Volgens de manual moet ik het op deze manier serializen en als ik het terug wil halen dan gaat het op de volgende manier: (Ook wel marshalling genoemd)
Als ik dit op deze manier ga uitvoeren dan krijg ik een Segmentation Fault.
Er even vanuit gaande dat de data structures en dergelijke al gedefinieerd zijn. Ik heb even de kleine gedeeltes gepaste die van belang zijn.
Meer informatie is hier te vinden: http://www.sleepycat.com/docs/ref/am_misc/struct.html
code:
1
2
3
4
| struct point {
char *x;
char *y;
} |
Vervolgens wil ik dit opslaan in db formaat zoals beschreven staat in de manual van Berkeley DB:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| // Serialize the struct
p = &data_buffer[0];
len = strlen(info.x);
memcpy(p, &len, sizeof(len));
p += sizeof(len);
memcpy(p, &info.y, sizeof(info.y));
p += sizeof(info.y);
memset(&key, 0, sizeof(key));
memset(&data, 0, sizeof(data));
key.data = "fruit";
key.size = sizeof("fruit");
data.data = data_buffer;
data.size = sizeof(data_buffer); |
Volgens de manual moet ik het op deze manier serializen en als ik het terug wil halen dan gaat het op de volgende manier: (Ook wel marshalling genoemd)
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| if ((ret = dbp->get(dbp, NULL, &key, &data, 0)) == 0) {
strcpy(data_buffer, data.data);
p = &data_buffer[0];
memcpy(&len, p, sizeof(len));
p += sizeof(len);
info2.x = malloc(len);
memcpy(info2.x, p, len);
p += len;
memcpy(&info2.y, p, sizeof(info2.y));
p += sizeof(info2.y);
printf("db: %s: key retrieved: data was %s and %s.\n", (char *)key.data, (char *)info2.x, (char *)info2.y);
} else {
dbp->err(dbp, ret, "DB->get");
} |
Als ik dit op deze manier ga uitvoeren dan krijg ik een Segmentation Fault.
Er even vanuit gaande dat de data structures en dergelijke al gedefinieerd zijn. Ik heb even de kleine gedeeltes gepaste die van belang zijn.
Meer informatie is hier te vinden: http://www.sleepycat.com/docs/ref/am_misc/struct.html
Google, Het mirakel van de 21e eeuw!!!!