elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Como proteger una cartera - billetera de Bitcoin


+  Foro de elhacker.net
|-+  Sistemas Operativos
| |-+  GNU/Linux (Moderador: MinusFour)
| | |-+  Berkeley BD - Programación Linux
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Berkeley BD - Programación Linux  (Leído 3,772 veces)
joe2011

Desconectado Desconectado

Mensajes: 11


Ver Perfil
Berkeley BD - Programación Linux
« en: 1 Marzo 2014, 13:16 pm »

Estimados amigos,

Estoy siguiendo el Manual de Programación en Linux de Kurt Wall y en su capítulo 10 muestra como trabajar con la base de datos de Berkeley. El caso es que el código que pongo a continuación no compila bien. Los fallos de compilación del código adjunto están en db_open y DB->close aunque linke a  
gcc abrir_db2.c -o abrir_db2 -lbd

abrir_db2.c: In function ‘main’:
abrir_db2.c:37:5: error: expected identifier or ‘(’ before ‘->’ token


Tampoco se cómo buscar por paginas mán de la Berkeley (si las tiene) sobre todo por averiguarr que versión tengo instalada y así intentar buscar algo de documentación para interaccionar desde C con ella. Al menos lo más básico, abrir, cerrar, añadir registros, etc.

Código
  1.  
  2. #include <stdlib.h>
  3. #include <stdio.h>
  4. #include <errno.h>
  5. #include <fcntl.h>
  6. #include <db.h>
  7.  
  8. int main (void)
  9. {
  10. DB puntero_db; /* descriptor de base de datos */
  11. int valor_retornado;
  12.  
  13. valor_retornado = db_open("test.db", DB_BTREE, DB_CREATE, 0600, NULL, NULL, &puntero_db);
  14.  
  15. if (valor_retornado) {
  16. perror ("db_open");
  17. exit(EXIT_FAILURE);
  18. }
  19.  
  20. DB->close(puntero_db,0);
  21. exit(EXIT_SUCCESS);
  22.  
  23. return EXIT_SUCCESS;
  24. }
  25.  

Respecto a la Berkeley DB encontré esta página:http://docs.oracle.com/cd/E17076_02/html/api_reference/C/frame_main.html pero tampoco funciona el código tomando estas funciones. Y esta otra https://bbs.archlinux.org/viewtopic.php?id=78032 pero tampoco consigo nada, ya digo creo que necesitaría saber que Berkeley tengo instalada.

Me da la sensación que el libro en general es demasiado antiguo porque en capítulos anteriores, por ejemplo en el que habla de archivos, toca el sistema ext-2 y Debian 7, ya monta ext-4. El caso es que me da que en los próximos capítulos a los que estoy deseando llegar donde toca la manipulación de pantalla con ncurses, redes y demás me pueda encontrar con los mismos problemas. Quisiera que me dieras vuestra opinión al respecto y, si existe algún manual más moderno me lo comentéis.

Un saludo.


« Última modificación: 1 Marzo 2014, 13:19 pm por joe2011 » En línea

do-while


Desconectado Desconectado

Mensajes: 1.276


¿Habra que sacarla de paseo?


Ver Perfil
Re: Berkeley BD - Programación Linux
« Respuesta #1 en: 1 Marzo 2014, 21:10 pm »

¡Buenas!

Tu no tienes un problema con GNU-Linux. El  problema lo tienes con la programación. Y el error te lo describe muy bien el compilador:
abrir_db2.c:37:5: error: expected identifier or ‘(’ before ‘->’ token

Eso mismo. Se espera un identificador antes de '->', y no miente, has puesto un tipo de dato, no el identificador de una variable.

Lee bien los mensajes de error.

¡Saludos!


En línea

- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!
joe2011

Desconectado Desconectado

Mensajes: 11


Ver Perfil
Re: Berkeley BD - Programación Linux
« Respuesta #2 en: 1 Marzo 2014, 21:19 pm »

Gracias por la respuesta tan escueta. Ya me di cuenta de eso pero falla aunque ponga puntero_db.

No obstante siguiendo http://docs.oracle.com/cd/E17076_02/html/index.html

He modificado el código a lo siguiente:
Código
  1. #include <db.h>
  2. #include <stdlib.h>
  3. #include <stdio.h>
  4. #include <errno.h>
  5.  
  6.  
  7.  
  8. int main ( void )
  9. {
  10.  
  11. DB *dbp;           /* DB structure handle */
  12. u_int32_t flags;   /* database open flags */
  13. int ret;           /* function return value */
  14.  
  15. /* Initialize the structure. This
  16. * database is not opened in an environment,
  17. * so the environment pointer is NULL. */
  18. ret = db_create(&dbp, NULL, 0);
  19. if (ret != 0) {
  20. /* Error handling goes here */
  21. perror("db_create");
  22. exit(EXIT_FAILURE);
  23. }
  24.  
  25. /* Database open flags */
  26. flags = DB_CREATE;    /* If the database does not exist,
  27.                        * create it.*/
  28.  
  29. /* open the database */
  30. ret = dbp->open(dbp,        /* DB structure pointer */
  31.                NULL,       /* Transaction pointer */
  32.                "test.db", /* On-disk file that holds the database. */
  33.                NULL,       /* Optional logical database name */
  34.                DB_BTREE,   /* Database access method */
  35.                flags,      /* Open flags */
  36.                0600);         /* File mode (using defaults) */
  37. if (ret != 0) {
  38. /* Error handling goes here */
  39. perror ("db_open");
  40. exit(EXIT_FAILURE);
  41. }
  42.  
  43. dbp->close(dbp,0);
  44. return EXIT_SUCCESS;
  45. } /* ----------  end of function main  ---------- */
  46.  

En fin, gracias por la respuesta.
En línea

do-while


Desconectado Desconectado

Mensajes: 1.276


¿Habra que sacarla de paseo?


Ver Perfil
Re: Berkeley BD - Programación Linux
« Respuesta #3 en: 2 Marzo 2014, 21:05 pm »

Gracias por la respuesta tan escueta. Ya me di cuenta de eso pero falla aunque ponga puntero_db.

 :D puntero_db no era un dato de tipo puntero (a no se que DB sea un typedef de un puntero de algun tipo de dato), asi que para acceder a la función de puntero_db no puedes utilizar el operador flecha, tienes que utilizar el operador punto.

¡Saludos!
En línea

- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!
joe2011

Desconectado Desconectado

Mensajes: 11


Ver Perfil
Re: Berkeley BD - Programación Linux
« Respuesta #4 en: 3 Marzo 2014, 21:11 pm »

Gracias, ya hice previamente la definicion
Código
  1. DB *puntero_db
  2.  

Pero bueno, ya comenté que encontre la solución en http://docs.oracle.com/cd/E17076_02/html/index.html
y estoy siguiendo ese tutorial junto con el Manual de Kurt Wall.

Por cierto, que me puedes decir respecto a la antigüedad de los libros y la existencia de manuales del estilo más actualizados.

Muchas gracias.
En línea

do-while


Desconectado Desconectado

Mensajes: 1.276


¿Habra que sacarla de paseo?


Ver Perfil
Re: Berkeley BD - Programación Linux
« Respuesta #5 en: 5 Marzo 2014, 11:01 am »

Por cierto, que me puedes decir respecto a la antigüedad de los libros y la existencia de manuales del estilo más actualizados.

Sobre la antigüedad, ni idea, nunca los he usado ni los conozco. Y manuales de estilo tampoco ni idea. Aplica sentido comun. Indenta los bloques de codigo, los cuerpos de los bucles, cuerpos de las funciones, los campos de los struct o miembros de clases... da nombres coherentes a las variables y funciones. Vamos, que mas que llamarlo estilo se debería de llamar sentido comun para que tu código se pueda leer y entender tanto por ti como por otros.

¡Saludos!
En línea

- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!
joe2011

Desconectado Desconectado

Mensajes: 11


Ver Perfil
Re: Berkeley BD - Programación Linux
« Respuesta #6 en: 6 Marzo 2014, 21:46 pm »

Gracias.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Programacion en linux
GNU/Linux
Hadess_inf 3 3,672 Último mensaje 10 Septiembre 2010, 02:11 am
por leogtz
Problema extraño al recibir string por socket TCP (ANSI-C + Berkeley sockets)
Programación C/C++
Scott Code 1 2,774 Último mensaje 6 Noviembre 2011, 20:44 pm
por Scott Code
Programacion web en Linux
Desarrollo Web
Hackmundy 6 3,688 Último mensaje 22 Diciembre 2012, 04:42 am
por Hackmundy
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines