Mostrando entradas con la etiqueta linux. Mostrar todas las entradas
Mostrando entradas con la etiqueta linux. Mostrar todas las entradas

sábado, 19 de febrero de 2011

C - Acceder a una base de datos en mysql desde C (1 de 2. Requisitos)

Como conectarnos a una instancia de servidor mysql-server y ejecutar consultas contra sus bases de datos.

Requerimientos:
Las cabeceras y librerías de C para realizar la conexión, nos las descargamos desde la web de mysql: http://dev.mysql.com/downloads/



Nos descargamos la versión adecuada a nuestro sistema, y obtenemos un archivo comprimido que contiene varias carpetas:


Para esta parte necesitaremos tener los permisos adecuados:

Las cabeceras:
El contenido de la carpeta  include lo copiamos en /usr/include

Las librerías
    El contenido de lib lo copiamos en  /usr/lib

estas también se pueden instalar desde los repositorios:
    sudo apt-get -s install libmysqlclient15-dev


A partir de ahora, con gcc podemos compilar nuestro codigo en C, indicándole con parámetros:

-L/usr/lib/mysql : añadimos una ruta a la lista de directorios donde deben buscarse las librerías que usa el programa
-lmysqlclient: le indicamos que para compilar el programa utilice la librería mysqlclient

Por ejemplo : gcc -o test  -L/usr/lib/mysql -lmysqlclient test.c


Informaciones sacadas de:

http://lists.mysql.com/mysql/200178
http://ubuntuforums.org/showthread.php?t=986042

viernes, 18 de febrero de 2011

C - Haciendo un codigo compatible con linux y windows

Cuando estamos haciendo un programa en C necesitamos tener en cuenta para en que sistema operativo va a ser compilado y ejecutado, porque aunque la mayoría del código valdrá indistintamente para ambos sistemas, con algunas acciones concretas que implican interactuar con el sistema operativo no ocurre así.
Un caso sería la construcción de rutas de acceso a un archivo, o un caso mucho más sencillo, hacer un limpiado de la pantalla antes de empezar a escribir, los comandos "clear" o "cls" según el sistema en el que estemos.

Existe una forma de hacerlo sin tener que reescribir lineas de código antes de compilar el programa, son las directivas, que permiten dirigir la ejecución del código en función de si está definida o no una macro.


//definición de una macro
#define __micontrol__

//si la macro está definida
#ifdef __micontrol__
    printf("%s","La macro __micontrol__ está definida");
//sino
#else
    printf("%s","La macro __micontrol__ NO está definida");
#endif


o también:


//si la macro está definida
#ifdef __micontrol__
    printf("%s","La macro __micontrol__ está definida");
#endif

//si la macro no está definida
#ifndef __micontrol__
    printf("%s","La macro __micontrol__ NO está definida");
#endif


Cuando estamos en un sistema linux, el compilador tiene predefinida una macro __linux__ o linux, según el sistema, así, comprobando la existencia o no de esa macro, sabemos en que sistema estamos ejecutando el programa, vamos a nuestro ejemplo de limpiar la pantalla:

Para no tener que preocuparnos si nuestro sistema linux tiene predefinida la macro __linux__ o la macro linux, y poder trabajar siempre con una de ellas independientemente del sistema (en este caso usar siempre __linux__), realizamos una comprobación previa, si existe linux, nosotros creamos __linux__.


#ifdef linux
    #ifndef __linux__
        #define __linux__
    #endif
#endif

void limpiarpantalla()
    {
    #ifdef __linux__
        system("clear");
    #else
        sistem("cls");
    #endif
    }


incluso podríamos ahorrarnos el crear una función y definir una macro que simplemente sería substituida a la hora de compilar:


#ifdef __linux__
    #define clrscr system("clear");
#else
    #define clrscr system("cls");
#endif


y en el código escibiríamos "clrscr;" donde fuera necesario.