/* chkseq.c Check sequential read and write */ #include #include "db-int.h" #include /* Error numbers */ #include /* O_CREAT, O_RDWR */ #include #include #include void main(int argc, char *argv[]) { char id1[] = {" "}, id2[] = {" "}; int i; long in = 0L, out = 0L; DB *dbp, *dbpo; DBT key, data, keyo, datao; FILE *fopen(), *fin; unlink("test.db"); if ((fin = fopen("data","r")) == NULL) { printf("Unable to open %s\n","data"); exit(25); } if ((dbp = dbopen("test.db",O_RDWR | O_CREAT | O_BINARY, 0664 , DB_BTREE, NULL )) == NULL) { printf("\n Open error on test.db %d %s\n",errno,strerror(errno)); exit(25); } while (fscanf(fin," %10s%10s",id1,id2) > 0) { key.size = 11; data.size = 11; key.data = id1; data.data = id2; printf("%10s %10s\n",key.data,data.data); if (dbp->put(dbp, &key, &data,R_NOOVERWRITE) != 0) { printf("Error writing output\n"); } out++; } printf("%d Records in\n",out); dbp->close(dbp); if ((dbp = dbopen("test.db", O_RDWR | O_BINARY, 0664 , DB_BTREE, NULL )) == NULL) { printf("\n Error on dbopen %d %s\n",errno,strerror(errno)); exit(61); } while (dbp->seq(dbp, &key, &data,R_NEXT) == 0) { strcpy(id1,key.data); keyo.size = 11; datao.size = 11; keyo.data = id1; strcpy(id2,data.data); id2[0] = 'U'; datao.data=id2; printf("%10s %10s\n",key.data,data.data); in++; if (in > 10) break; #ifdef notdef if (dbp->put(dbp, &keyo, &datao,0) != 0) { printf("Write failed at %d\n",in); exit(85); } #else if (dbp->put(dbp, &keyo, &datao,R_CURSOR) != 0) { printf("Write failed at %d\n",in); exit(85); } #endif } printf("%d Records copied\n",in); in = 0; dbp->seq(dbp, &key, &data,R_FIRST); printf("%10s %10s\n",key.data,data.data); in++; while (dbp->seq(dbp, &key, &data,R_NEXT) == 0) { in++; printf("%10s %10s\n",key.data,data.data); } printf("%d Records read\n",in); dbp->close(dbp); }