전 98에 cgywin을 깔아서 unix프로그래밍을 하고 있거덩요..
근데 wrox 출판사의 소스 그대로 깔아서 컴파일까지 성공적인데 실행시키면
Failed to open database라고 나오내여..웅웅 T.T
소스는
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <fcntl.h>
#include <ndbm.h>
#include <string.h>
#define TEST_DB_FILE "dbm1_test"
#define ITEMS_USED 3
/* A struct to use to test dbm */
struct test_data {
char misc_chars[15];
int any_integer;
char more_chars[21];
};
int main() {
struct test_data items_to_store[ITEMS_USED];
struct test_data item_retrieved;
char key_to_use[20];
int i, result;
datum key_datum;
datum data_datum;
DBM *dbm_ptr;
dbm_ptr = dbm_open(TEST_DB_FILE, O_RDWR | O_CREAT, 0666);
if (!dbm_ptr) {
fprintf(stderr, "Failed to open database"); //이곳에서
exit(EXIT_FAILURE); //에라나는 것
} //같아요
/* put some data in the structures */
memset(items_to_store, ' ', sizeof(items_to_store));
strcpy(items_to_store[0].misc_chars, "First!");
i
tems_to_store[0].any_integer = 47;
strcpy(items_to_store[0].more_chars, "foo");
strcpy(items_to_store[1].mis
c_chars, "bar");
items_to_store[1].any_integer = 13;
strcpy(items_to_store[1].more_chars, "unlucky?");
strcpy(items_to_store[2].misc_chars, "Third");
items_to_store[2].any_integer = 3;
strcpy(items_to_store[2].
more_chars, "baz");
for (i = 0; i < ITEMS_USED; i++) {
/* build a key to use */
spr
intf(key_to_use, "%c%c%d",
items_to_store[i].misc_chars[0],
items_to_store[i].more_c
hars[0],
items_to_store[i].any_integer);
/* build the key datum strcture */
key_datum.dptr = (void *)key_to_use;
key_datum.dsize = strlen(key_to_use);
data_datum.dptr
= (void *)&items_to_store[i];
data_datum.dsize = sizeof(struct test_data);
result = dbm_store(
dbm_ptr, key_datum, data_datum,
DBM_REPLACE);
if (result != 0) {
fprintf(stderr, "dbm_sto
re failed on key %s",
key_to_use);
exit(2);
}
} /* for */
/* now try a
nd retrieve some data */
sprintf(key_to_use, "bu%d", 13); /* this is the key for the second
item */
key_dat
um.dptr = key_to_use;
key_datum.dsize = strlen(key_to_use);
data_datum = dbm_fetch(dbm_ptr, key_datum);
if (data_datum.dptr) {
printf("Data retrieved");
memcpy(&item_retrieved, data_datum.dptr, dat
a_datum.dsize);
printf("Retrieved item - %s %d %s",
item_retrieved.misc_chars,
item_retrieved.any_integer,
item_retrieved.more_chars);
}
else {
printf("No data found for key %s", key_to_use);
}
dbm_close(dbm_ptr);
exit(EXIT_SUCCESS);
}
인데여..