dbopen(3)

NOME
dbopen - métodos de acesso a banco de dados

BIBLIOTECA
Biblioteca C Padrão (libc, -lc)

SINOPSE
#include <sys/types.h>
#include <limits.h>
#include <db.h>
#include <fcntl.h>

DB *dbopen(const char *path, int flags, int mode, DBTYPE type,
           const void *openinfo);

DESCRIÇÃO
Observe bem: Esta página documenta interfaces fornecidas até o glibc 2.1. Desde o glibc 2.2, o glibc não fornece mais essas interfaces. Provavelmente, você está procurando as APIs fornecidas pela biblioteca libdb.

dbopen() é a interface de biblioteca para arquivos de banco de dados. Os formatos de arquivos suportados são btree, esmiuçados e orientados a arquivos UNIX. O formato btree é uma representação de uma estrutura de árvore balanceada e ordenada. O formato 'hash' é um esquema de esmiuçamento dinâmico e extensível. O formato 'texto plano' é um arquivo de sequência de bytes com registros de comprimento fixo ou variável. Os formatos e as informações específicas de formato são descritas em detalhes em suas respectivas páginas de manual btree(3), hash(3) e recno(3).

dbopen() opens path for reading and/or writing. Files never intended to be preserved on disk may be created by setting the path argument to NULL.

As flags e argumentos de modo são como especificados para a rotina open(2), porém, somente as flags O_CREAT, O_EXCL, O_EXLOCK, O_NONBLOCK, O_RDONLY, O_RDWR, O_SHLOCK e O_TRUNC são significativas. (Note, a abertura de um arquivo de banco de dados O_WRONLY não é possível.)

O argumento type é do tipo DBTYPE (como definido no arquivo 'include' <db.h>) e pode ser setado para DB_BTREE, DB_HASH ou DB_RECNO.

O argumento openinfo é um ponteiro para uma estrutura de método de acesso específica, descrita na página de manual do método de acesso. Se openinfo é NULO, cada método de acesso usará padrões adequados para o sistema e o método de acesso.

dbopen() retorna um ponteiro para uma estrutura DB se for bem-sucedido, e NULO em caso de erro. A estrutura DB é definida no arquivo 'include' <db.h>, é contém pelo menos os seguintes campos:

    typedef struct {
        DBTYPE type;
        int (*close)(const DB *db);
        int (*del)(const DB *db, const DBT *key, unsigned int flags);
        int (*fd)(const DB *db);
        int (*get)(const DB *db, DBT *key, DBT *data,
                   unsigned int flags);
        int (*put)(const DB *db, DBT *key, const DBT *data,
                   unsigned int flags);
        int (*sync)(const DB *db, unsigned int flags);
        int (*seq)(const DB *db, DBT *key, DBT *data,
                   unsigned int flags);
    } DB;

Estes elementos descrevem um tipo de banco de dados e um conjunto de funções realizando várias ações. Estas funções usam um ponteiro para uma estrutura como retornado por dbopen(), e às vezes um ou mais ponteiros para estruturas chave/dados e um valor de sinalização.

type
    O tipo de método-base de acesso (e formato de arquivo).

close
    Um ponteiro para uma rotina que esvazia qualquer informação no cache de disco, libera quaisquer recursos alocados, e fecha o(s) arquivo(s) de base. Como os pares chave/dados podem ficar no cache de memória, uma falha em sincronizar o arquivo com uma função close ou sync pode resultar em inconsistência ou perda de informação. Rotinas close retornam -1 em caso de erro (configurando errno), e 0 em caso de sucesso.

del Um ponteiro para uma rotina que remove pares chave/dados do banco de dados.

    O argumento flag pode ser definido para o seguinte valore:

    R_CURSOR
        Apaga o registro referenciado pelo cursor. O cursor precisa ser inicializado previamente.

    Rotinas delete retornam -1 em caso de erro (configurando errno), 0 em caso de sucesso, e 1 se a chave especificada não estiver no arquivo.

fd  A pointer to a routine which returns a file descriptor representative of the underlying database. A file descriptor referencing the same file will be returned to all processes which call dbopen() with the same path name. This file descriptor may be safely used as an argument to the fcntl(2) and flock(2) locking functions. The file descriptor is not necessarily associated with any of the underlying files used by the access method. No file descriptor is available for in memory databases. fd routines return -1 on error (setting errno), and the file descriptor on success.

get Um ponteiro para uma rotina que é a interface para buscas chaveadas no banco de dados. O endereço e o comprimento dos dados associados com a chave específica na estrutura referenciada pelos dados. Rotinas get retornam -1 em caso de erro (configurando errno), 0 em caso de sucesso, e 1 se a chave não estava no arquivo.

put Um ponteiro para uma rotina que armazena pares chave/dados no banco de dados.

    O argumento flag pode ser definido para um dos seguintes valores:

    R_CURSOR
        Substitui os pares chave/dados referenciados pelo cursor. O cursor deve ser inicializado previamente.

    R_IAFTER
        Acrescenta o dado imediatamente após o dado referenciado pela chave, criando um novo par chave/dado. O número de registro do par chave/dado acrescentado é retornado na estrutura chave. (Aplicável somente para o método de acesso DB_RECNO.)

    R_IBEFORE
        Insere o dado imediatamente antes do dado referenciado pela chave, criando um novo par chave/dado. O número de registro do par chave/dado é retornado na estrutura chave. (Aplicável somente para o método de acesso DB_RECNO.)

    R_NOOVERWRITE
        Entra o novo par chave/dado somente se a chave não existe anteriormente.

    R_SETCURSOR
        Armazena o par chave/dado, configurando ou inicializando a posição do cursor para referenciá-lo. (Aplicável somente para os método de acesso DB_BTREE e DB_RECNO.)

    R_SETCURSOR está disponível somente para os métodos de acesso DB_BTREE e DB_RECNO, porque ele implica que as chaves têm uma ordem inerente que não se altera.

    R_IAFTER e R_IBEFORE estão disponíveis somente para o método de acesso DB_RECNO porque elas implicam que o método de acesso é capaz de criar novas chaves. Isto é verdade apenas se as chaves são ordenadas e independentes, números de registro por exemplo.

    O comportamento padrão das rotinas put é entrar o novo par chave/dado, substituindo qualquer chave existente anteriormente.

    Rotinas put retornam -1 em caso de erro (configurando errno), 0 em caso de sucesso, e 1 se a flag R_NOOVERWRITE foi setada e a chave já existe no arquivo.

seq Um ponteiro para uma rotina que é a interface para uma busca sequencial no banco de dados. O endereço e o comprimento da chave são retornados na estrutura referenciada pela chave, e o endereço e o comprimento dos dados são retornados na estrutura referenciada pelo dado.

    Pares chave/dado sequenciais recuperados podem começar a qualquer tempo, e a posição do 'cursor' não é afetada pela chamada das rotinas del, get, put, ou sync. As modificações no banco de dados durante uma busca se refletirão na busca, isto é, os registros inseridos atrás do cursor não serão retornados, enquanto que os registros inseridos na frente do cursor serão.

    O valor da flag precisa ser setado para um dos seguintes valores:

    R_CURSOR
        São retornados os dados asscociados com a chave especificada. Isto difere das rotinas get pelo fato de ela setar ou inicializar o cursor para o local da chave também. (Note, para o método de acesso DB_BTREE, a chave retornada não é necessariamente uma combinação exata para a chave especificada. A chave retornada é a menor chave que seja maior ou igual à chave especificada, permitindo buscas com combinações de chave e buscas de chave parciais.)

    R_FIRST
        É retornado o primeiro par chave/dado do banco de dados, e o cursor é setado ou inicializado para referenciá-lo.

    R_LAST
        É retornado o último par chave/dado do banco de dados, e o cursor é setado ou inicializado para referenciá-lo. (Aplicável somente para os métodos de acesso DB_BTREE e DB_RECNO.)

    R_NEXT
        Recupera o par chave/dado imediatamente após o cursor. Se o cursor ainda não estiver setado, este é o mesmo que o flag R_FIRST.

    R_PREV
        Recupera o par chave/dado imediatamente antes do cursor. Se o cursor ainda não estiver setado, este é o mesmo que o flag R_LAST. (Aplicável somente para os métodos de acesso DB_BTREE e DB_RECNO.)

    R_LAST e R_PREV estão disponíveis somente para os métodos de acesso DB_BTREE e DB_RECNO, porque eles implicam que as chaves têm uma ordem inerente que não se altera.

    Rotinas seq retornam -1 em caso de erro (configurando errno), 0 em caso de sucesso e 1 se não há pares chave/dado menores ou maiores que a chave especificada ou atual. Se o método de acesso DB_RECNO está sendo usado, e se o arquivo de banco de dados é um arquivo de caracteres especiais, e nenhum par chave/dado completo está disponível no momento, as rotinas seq retornam 2.

sync
    Um ponteiro para uma rotina que esvazia qualquer informação armazenada em cache no disco. Se o banco de dados está somente na memória, a rotina sync não tem efeito e sempre será bem-sucedida.

    O valor da flag será setada para os seguintes valores:

    R_RECNOSYNC
        Se o método de acesso DB_RECNO estiver sendo usado, esta flag faz com que a rotina sync seja aplicada ao arquivo btree que é a base do arquivo recno, e não ao próprio arquivo recno. (Veja o campo bfname da página de manual recno(3) para mais informações.)

    Rotinas sync retornam -1 em caso de erro (configurando errno), e 0 em caso de sucesso.

  Pares chave/dados
O acesso a todos os tipos de arquivos é baseado em pares chave/dado. Tanto a chave quanto os dados são representados pela seguinte estrutura de dados:

    typedef struct {
        void  *data;
        size_t size;
    } DBT;

Os elementos da estrutura DBT são definidos como segue:

data
    Um ponteiro para uma sequência de bytes.

size
    O comprimento da sequência de bytes.

Sequências de bytes de chaves e dados podem referenciar comprimentos essencialmente ilimitados, apesar de que quaisquer dois deles precisam caber na memória disponível ao mesmo tempo. Deve-se notar que os métodos de acesso não dão garantia de alinhamento das sequências de bytes.

ERROS
A rotina dbopen() pode falhar e setar errno para qualquer um dos erros especificados para as rotinas de biblioteca open(2) e malloc(3), ou o seguinte:

EFTYPE
    Um arquivo foi formatado incorretamente.

EINVAL
    Foi especificado um parâmetro (função de esmiuçamento, byte de bloco, etc.) que é incompatível com a especificação de arquivos corrente, ou que não é significativo para a função (por exemplo, o uso do cursor sem inicialização anterior), ou há incompatibilidade entre o número de versão do arquivo e o software.

As rotinas close podem falhar e setar errno para qualquer um dos erros especificados para as rotinas de biblioteca close(2), read(2), write(2), free(3) ou fsync(2).

As rotinas del, get, put e seq podem falhar e setar errno para qualquer um dos erros especificados para as rotinas de biblioteca read(2), write(2), free(3) ou malloc(3).

As rotinas fd falharão e setarão errno para ENOENT nos banco de dados de memória.

As rotinas sync podem falhar e setar errno para qualquer um dos erros especificados para a rotina de biblioteca fsync(2).

BUGS
O tipo definido DBT é um mnemônico para 'data base thing' (objeto de banco de dados), e foi usado porque ninguém conseguiu pensar em um nome razoável que ainda não estivesse em uso.

A interface de descritor de arquivo é um remendo e será eliminado em uma versão futura da interface.

Nenhum dos métodos de acessp provê qualquer forma de acesso concorrente, travamento ou transações.

VEJA TAMBÉM
btree(3), hash(3), mpool(3), recno(3)

LIBTP: Portable, Modular Transactions for UNIX, Margo Seltzer, Michael Olson, USENIX proceedings, Winter 1992.

TRADUÇÃO
A tradução para português brasileiro desta página man foi criada por Rubens de Jesus Nogueira <darkseid99@usa.net>, André Luiz Fassone <lonely_wolf@ig.com.br> e Rafael Fontenelle <rafaelff@gnome.org>.

Esta tradução é uma documentação livre; leia a Licença Pública Geral GNU Versão 3 (https://www.gnu.org/licenses/gpl-3.0.html) ou posterior para as condições de direitos autorais. Nenhuma responsabilidade é aceita.

Se você encontrar algum erro na tradução desta página de manual, envie um e-mail para a lista de discussão de tradutores (debian-l10n-portuguese@lists.debian.org).