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

 

 


Tema destacado: Guía actualizada para evitar que un ransomware ataque tu empresa


  Mostrar Mensajes
Páginas: [1] 2
1  Sistemas Operativos / GNU/Linux / Re: Berkeley BD - Programación Linux en: 6 Marzo 2014, 21:46 pm
Gracias.
2  Programación / Programación C/C++ / Re: Programacion API linux en: 6 Marzo 2014, 21:45 pm
Gracias por el aporte. Lo completo un poco.

http://www.linuxfromscratch.org/lfs/read.html
http://www.escomposlinux.org/lfs-es/

Un saludo.
3  Sistemas Operativos / GNU/Linux / n-curses - depuración en: 3 Marzo 2014, 21:33 pm
Buenas noches, amigos
Realizando las prácticas del capítulo 11 de Programación en  Linux con ejemplos de Kurt Wall, el referido a n-curses, me encuentro con el siguiente problema.

Parece ser que para habilitar la depuración es necesario linkar a ncurses_g y habilitar trace(N) en el código. Para probarlo propone el siguiente código:
Código
  1. /* Filename: depurador.c */
  2.  
  3. #include <curses.h>
  4.  
  5. int main (void)
  6. {
  7. initscr();
  8.  
  9. trace(TRACE_CALLS);
  10. printw("Establecer nivel de depuración para TRACE_CALLS");
  11. refresh();
  12. endwin();
  13. return 0;
  14. }
  15.  

 
El caso es que no tenía la biblioteca libncurses_g.a y la instalé den debian 7 con
 sudo apt-get install libncurses5-dbg

Al ejecutar el comanda de compilación y depuración
gcc depurador.c -o depurador -lncurses_g

La cantidad de errores es enorme, pongo la parte final
/usr/lib/gcc/i486-linux-gnu/4.7/../../../../lib/libncurses_g.a(lib_echo.o): In function `echo':
/tmp/buildd/ncurses-5.9/ncurses/base/lib_echo.c:52: undefined reference to `_nc_tracing'
/tmp/buildd/ncurses-5.9/ncurses/base/lib_echo.c:53: undefined reference to `SP'
/tmp/buildd/ncurses-5.9/ncurses/base/lib_echo.c:56: undefined reference to `_nc_retrace_int'
/tmp/buildd/ncurses-5.9/ncurses/base/lib_echo.c:52: undefined reference to `SP'
/tmp/buildd/ncurses-5.9/ncurses/base/lib_echo.c:52: undefined reference to `_tracef'
/tmp/buildd/ncurses-5.9/ncurses/base/lib_echo.c:53: undefined reference to `SP'
/tmp/buildd/ncurses-5.9/ncurses/base/lib_echo.c:54: undefined reference to `_nc_retrace_int'
/usr/lib/gcc/i486-linux-gnu/4.7/../../../../lib/libncurses_g.a(lib_echo.o): In function `noecho':
/tmp/buildd/ncurses-5.9/ncurses/base/lib_echo.c:70: undefined reference to `_nc_tracing'
/tmp/buildd/ncurses-5.9/ncurses/base/lib_echo.c:71: undefined reference to `SP'
/tmp/buildd/ncurses-5.9/ncurses/base/lib_echo.c:74: undefined reference to `_nc_retrace_int'
/tmp/buildd/ncurses-5.9/ncurses/base/lib_echo.c:70: undefined reference to `SP'
/tmp/buildd/ncurses-5.9/ncurses/base/lib_echo.c:70: undefined reference to `_tracef'
/tmp/buildd/ncurses-5.9/ncurses/base/lib_echo.c:71: undefined reference to `SP'
/tmp/buildd/ncurses-5.9/ncurses/base/lib_echo.c:72: undefined reference to `_nc_retrace_int'
/usr/lib/gcc/i486-linux-gnu/4.7/../../../../lib/libncurses_g.a(lib_erase.o): In function `werase':
/tmp/buildd/ncurses-5.9/ncurses/base/lib_erase.c:54: undefined reference to `_nc_tracing'
/tmp/buildd/ncurses-5.9/ncurses/base/lib_erase.c:54: undefined reference to `_tracef'
/tmp/buildd/ncurses-5.9/ncurses/base/lib_erase.c:91: undefined reference to `_nc_retrace_int'
/tmp/buildd/ncurses-5.9/ncurses/base/lib_erase.c:91: undefined reference to `_nc_retrace_int'
collect2: error: ld returned 1 exit status


Agradecería me dijérais que es lo que puede pasar. ¿Es posible que haya instalado una libreria de depuración que no corresponda con la versión que tenga instalada de ncurses?

Muchas gracias.

4  Sistemas Operativos / GNU/Linux / Re: Berkeley BD - Programación Linux 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.
5  Programación / Programación C/C++ / Re: Programacion API linux en: 1 Marzo 2014, 21:43 pm
Hola, amigo

Yo estoy siguiendo el siguiente manual
http://es.scribd.com/doc/182307480/Programacion-en-Linux-Kurt-Wall-pdf

Complementado con otro del mismo autor de Programación en Linux, pero ese lo tengo original. Este último complementa el anterior.

Respecto al primero tengo los ejemplos hechos hasta el capítulo 10, menos los 2 primeros capítulos que ya me los sabía (gcc y make) así que si te decides y tienes dudas en esos capítulos ya sabes donde preguntar.

Un saludo.
6  Sistemas Operativos / GNU/Linux / Re: Berkeley BD - Programación Linux 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.
7  Sistemas Operativos / GNU/Linux / 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.
8  Sistemas Operativos / GNU/Linux / Re: Bloqueos en Linux con fcntl. en: 30 Septiembre 2013, 23:33 pm
¡Vaya error más tonto! Disculpen las molestias.

He cerrado el descriptor en el módulo Desbloqueo, y ha de cerrarse en el bloque que establece el bloqueo de escritura, posteriormente a un getchar ()

Es decir, borrar la línea 33, e incluir en las líneas 38 y 39

Código
  1. close(fd);
9  Sistemas Operativos / GNU/Linux / Bloqueos en Linux con fcntl. en: 29 Septiembre 2013, 23:29 pm
Buenas noches de nuevo, compañeros del foro

De nuevo me dirijo a vosotros con un problema de programación en linux. Esta vez en relación al bloqueo de descriptores de archivo.

Como he comentado en otra ocasión, estoy siguiendo el libro de Prentice Hall de Kurt Walt Programación en Linux y, aunque lentamente voy progresando, gracias al libro y a vuestra ayuda.

En esta ocasión se trata de ejecutar el programa desde dos ventanas distintas  (./lockit /tmp/foo) y ver como permite a ambos el bloqueo de lectura (del primer byte) pero cuando en una de ellas pasas al bloqueo de escritura (El programa usa getchar() para detener la ejecución) debe decirte que el pid del programa que lo ejecuta en el otro terminal aún lo tiene bloqueado para lectura y no permitírlo. Bien, esto no me ha funcionado, incluso ejecutándolo en un único terminal la salida que obtengo al ejecutar el bloqueo de escritura es:

          bloqueo de escritura ya establecido por -1075043608

cuando debería escribir lo que haya en el campo lock.l_pid, que según la página man de fcntl es lo que debe imprimir.

En fin, si podéis ayudarme os lo agradeceria. Más abajo el código.

Un saludo.


Código
  1. /*
  2.  * lockit.c - Establece el bloqueo en un archivo
  3.  */
  4. #include <unistd.h>
  5. #include <sys/file.h>
  6. #include <sys/types.h>
  7. #include <sys/stat.h>
  8. #include <stdio.h>
  9. #include <stdlib.h>
  10.  
  11. /* Establece un bloqueo de tipo en el descriptor fd */
  12. void setlock(int fd, int type);
  13.  
  14. int main ( int argc, char *argv[] )
  15. {
  16. int fd;
  17. /* Abre el archivo */
  18. fd = open(argv[1], O_RDWR | O_CREAT, 0666);
  19. if (fd < 0) {
  20. perror("open");
  21. exit(EXIT_FAILURE);
  22. }
  23.  
  24. /* Establece un bloqueo de lectura */
  25. setlock(fd, F_RDLCK);
  26. printf("PID %d bloqueado para lectura %s\n", getpid(), argv[1]);
  27.  
  28. /* Desbloqueo */
  29. setlock(fd, F_UNLCK);
  30. printf("PID %d unlocked %s\n", getpid(), argv[1]);
  31. close(fd);
  32.  
  33. /* Establece un bloqueo de escritura */
  34. setlock(fd, F_WRLCK);
  35. printf("PID %d bloqueado para escritura %s\n", getpid(), argv[1]);
  36.  
  37.  
  38. return EXIT_SUCCESS;
  39. } /* ----------  end of function main  ---------- */
  40.  
  41. void setlock(int fd, int type)
  42. {
  43. struct flock lock;
  44. char msg[80];
  45.  
  46. /* Describe el bloqueo que queremos */
  47. lock.l_whence = SEEK_SET;
  48. lock.l_start = 0;
  49. lock.l_len = 1; /* bloquea un solo bit */
  50.  
  51. while (1) {
  52. lock.l_type = type;
  53. /* Bloqueo establecido y vuelta al que llama */
  54. if ((fcntl(fd, F_SETLK, &lock)) == 0)
  55. return;
  56.  
  57. /* Busca por qué no podemos establecer el bloqueo */
  58. fcntl(fd, F_GETLK, &lock);
  59. if(lock.l_type != F_UNLCK) {
  60. switch(lock.l_type) {
  61. case(F_RDLCK):
  62. sprintf(msg, "bloqueo de lectura ya establecido por %d\n", lock.l_pid);
  63. break;
  64. case(F_WRLCK):
  65. sprintf(msg, "bloqueo de escritura ya establecido por %d\n", lock.l_pid);
  66. break;
  67. }
  68. }
  69. puts(msg);
  70. }
  71. }
  72.  
10  Programación / Programación C/C++ / Re: Utilización de FSTAT (programando C Linux) en: 22 Septiembre 2013, 19:03 pm
Muchísimas gracias por ayudarme en la resolución del problema. Está claro, no había incluido la llamada a fstat. Lo he incluido y el resultado es el esperado.

Un saludo.
Código
  1. if ((fstat(fd,&buf)) < 0){
  2.    perror("fstat");
  3.    exit(EXIT_FAILURE);
  4. }
  5.  
Páginas: [1] 2
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines