La biblioteca GLib es una herramienta fundamental para la progrmaación en C en sistemas Linux y Unix. Proporciona un conjunto de estructuras de datos, macros y funciones utilitarias que mejoran la portabilidad y eficiencia del código.
Configuración de la compilación
Para compilar con información de depuración, se pueden usar los siguientes métodos:
./configure CFLAGS=-g && make && make install
Alternativamente, al ejecutar make directamente:
make CFLAGS=-g
Definiciones de tipos
GLib define tipos de datos que garantizan portabilidad entre plataformas:
- Tipos de enteros: gint8, guint8, gint16, guint16, gint32, guint32, gint64, guint64
- Booleanos: gboolean con valores TRUE y FALSE
- Caracteres: gchar equivalente a char
- Punteros genéricos: gpointer para void* y gconstpointer para const void*
Macros importantes
Conversiones de tipos
- GINT_TO_POINTER(conv): Convierte un valor int a gpointer
- GPIONTER_TO_INT(ptr): Convierte gpointer a int
- GUINT_TO_POINTER(conv): Convierte uint a gpointer
- GPOINTER_TO_UINT(ptr): Convierte gpointer a uint
Macros de depuración
Las macros de verificación de precondiciones se pueden desactivar definiendo G_DISABLE_CHECKS. Las aserciones se desactivan con G_DISABLE_ASSERT. Ambas usan g_log para reportar advertencias.
Verificación de widgets
Los macros GTK_IS_*
- GTK_IS_BUTTON: Verifica si un widget es un botón
- GTK_IS_NOTEBOOK: Verifica si un widget es un cuaderno
Funciones esenciales
- Mensajes: g_warning (advertencia), g_error (error y fianliza), g_print (mensaje informativo)
- Conteo de referencias: g_object_unref(objeto) reduce el contador y elimina el objeto cuando llega a cero
- Operaciones de sistema: g_file_test verifica existencia de archivos, g_spawn_sync crea procesos hijos síncronos
Gestión de memoria
- g_malloc: Asigna memoria y finaliza el programa si falla
- g_free: Libera memoria ignorando punteros NULL
- g_realloc: Reasigna bloques de memoria
- g_malloc0: Asigna memoria inicializada a cero
Manipulación de cadenas
Operaciones básicas
- g_snprintf: Formateo seguro de cadenas
- g_strcasecmp: Comparación sin distinción de mayúsculas
- g_strncasecmp: Comparación de n caracteres sin distinción
Transformaciones
- g_strdown: Convierte a minúsculas
- g_strup: Convierte a mayúsculas
- g_strreverse: Invierte la cadena
- g_strchug: Elimina espacios iniciales
- g_strchomp: Elimina espacios finales
Conversiones
- g_strtod: Cadena a gdouble
- g_strerror: Código de error a mensaje
- g_strsignal: Valor de señal a descripción
Estructuras de datos
Listas enlazadas
GLib ofrece listas simples (GSList) y dobles (GList). Los datos se almacenan como gpointer. Funciones específicas incluyen:
- g_slist_append: Agrega al final
- g_slist_prepend: Inserta al inicio
- g_slist_reverse: Invierte el orden
- g_slist_insert: Inserta en posición específica
- g_slist_remove: Elimina elemento
- g_slist_foreach: Itera aplicando función
Árboles
GTree implementa árboles binarios balanceados para almacenamiento ordenado.
Cadenas dinámicas (GString)
Estructura que permite manejo automático de memoria para cadenas:
struct GString {
gchar *cadena;
gint longitud;
};
Funciones principales:
- g_string_new: Crear nueva instancia
- g_string_free: Liberar memoria
- g_string_assign: Asignar contenido
- g_string_append: Concatenar al final
- g_string_prepend: Concatenar al inicio
Temporización de operaciones
Para medir tiempos de ejecución:
- g_timer_new: Crear temporizador
- g_timer_start: Iniciar medición
- g_timer_stop: Detener medición
- g_timer_elapsed: Obtener tiempo transcurrido
- g_timer_destroy: Liberar recursos
Manejo de errores
- g_error: Muestra error y finaliza el programa
- g_warning: Muestra advertencia sin finalizar
- g_message: Muestra mensaje informativo
- g_assert: Verifica condiciones y aborta si falla
- g_return_if_fail: Retorno condicional de funciones
Funciones de sistema
- g_get_prgname/g_set_prgname: Obtener/establecer nombre del programa
- g_get_user_name: Obtener nombre de usuario actual
- g_get_home_dir: Obtener directorio home
- g_get_current_dir: Obtener directorio de trabajo actual
- g_basename: Extraer nombre de archivo de una ruta
- g_dirname: Extraer directorio de una ruta