Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用C在berkeley DB中指定的非法标志错误_C_Berkeley Db - Fatal编程技术网

使用C在berkeley DB中指定的非法标志错误

使用C在berkeley DB中指定的非法标志错误,c,berkeley-db,C,Berkeley Db,下面是我的代码: #include <sys/types.h> #include <stdio.h> #include <string.h> #include <stdlib.h> #include <db.h>

下面是我的代码:

#include <sys/types.h>
                           #include <stdio.h>
                           #include <string.h>
                           #include <stdlib.h>
                           #include <db.h>

                           #define  DATABASE "access.db"

                       typedef struct {

                   char data1[20];
                   char src[20];
                    } pearson_record;

快速浏览一下的文档就会发现:“要指定DB_SET_RECNO,基础数据库必须是Btree类型,并且必须使用DB_RECNUM标志创建。”

看起来您并没有使用该标志创建数据库。我还没有看完代码的其余部分,但这显然是一个需要修复的地方

你也可以在网上问这些问题

问候,


Dave

快速浏览的文档中说:“要指定DB_SET_RECNO,基础数据库必须是Btree类型,并且必须使用DB_RECNUM标志创建。”

看起来您并没有使用该标志创建数据库。我还没有看完代码的其余部分,但这显然是一个需要修复的地方

你也可以在网上问这些问题

问候,


Dave

@Dave:我试图设置DB_RECNUM标志…但仍然得到一个错误作为非法标志。一个老家伙,我知道。。。但是@dsgleau是正确的,尽管没有足够的细节。您需要调用db->set_flags(db,db_RECNUM);在db_create和db_open之间。@Dave:我试图设置db_RECNUM标志…但仍然得到一个错误作为非法标志。我知道这是一个老问题。。。但是@dsgleau是正确的,尽管没有足够的细节。您需要调用db->set_flags(db,db_RECNUM);在db_create和db_open之间。
                       int
                       main()

                {


                     pearson_record s;
                 char *papa="1.1.1.1";
                 char *source="papa";
                 DB *dbp;
                 DBT key, data;
                 int ret, t_ret;
                 db_recno_t recno;



    if ((ret = db_create(&dbp, NULL, 0)) != 0) {
        fprintf(stderr, "db_create: %s\n", db_strerror(ret));
        exit (1);
    }
    if ((ret = dbp->open(dbp,
        NULL, DATABASE, NULL, DB_BTREE, DB_CREATE, 0664)) != 0) {
        dbp->err(dbp, ret, "%s", DATABASE);
        goto err;
    }


    recno = 10;

#define BUFFER_LENGTH   (5 * 1024 * 1024)
data.ulen = BUFFER_LENGTH;
    data.flags = DB_DBT_USERMEM;

    strncpy(s.data1, papa, strlen(papa)+1);
    strncpy(s.src, source, strlen(source)+1);

    memset(&key, 0, sizeof(key));
    memset(&data, 0, sizeof(data));
    //memset(&s, 0, sizeof(struct pearson_record));
    key.data = &recno;
    key.size = sizeof(recno);
    data.data = &s;
    data.size = sizeof(s);


    papa="1.1.1.2";
    source="papaa";
        strncpy(s.data1, papa, strlen(papa)+1);
    strncpy(s.src, source, strlen(source)+1);


        if ((ret = dbp->put(dbp, NULL, &key,&data,0)) == 0)
    printf("db: %d: key stored.\n", *(int *)key.data);
    else
    {
        dbp->err(dbp, ret, "DB->put");
        goto err;
    }
    recno = 11;


    strncpy(s.data1, papa, strlen(papa)+1);
    strncpy(s.src, source, strlen(source)+1);

    memset(&key, 0, sizeof(key));
    memset(&data, 0, sizeof(data));
    //memset(&s, 0, sizeof(struct pearson_record));
    key.data = &recno;
    key.size = sizeof(recno);
    data.data = &s;
    data.size = sizeof(s);


    papa="1.1.1.2";
    source="papaa";
    strncpy(s.data1, papa, strlen(papa)+1);
    strncpy(s.src, source, strlen(source)+1);


    if ((ret = dbp->put(dbp, NULL, &key,&data,0)) == 0)
    printf("db: %d: key stored.\n", *(int *)key.data);
    else
    {
        dbp->err(dbp, ret, "DB->put");
        goto err;
    }
    pearson_record *ppr;
         if ((ret = dbp->get(dbp, NULL, &key, &data, DB_SET_RECNO)) == 0) {

    ppr = (pearson_record *) data.data;

    printf("db: %d: key retrieved: data was %s,%s. %d\n",
            *(int *)key.data, ppr->data1,ppr->src, data.size);
    }
    else {
        dbp->err(dbp, ret, "DB->get");
        goto err;
    }

if ((ret = dbp->get(dbp, NULL, &key, &data, DB_SET_RECNO)) == 0) {

    ppr = (pearson_record *) data.data;

    printf("db: %d: key retrieved: data was %s,%s. %d\n",
            *(int *)key.data, ppr->data1,ppr->src, data.size);
    }
    else {
        dbp->err(dbp, ret, "DB->get");
        goto err;
    }



err:    if ((t_ret = dbp->close(dbp, 0)) != 0 && ret == 0)
        ret = t_ret; 


    exit(ret);
}