Introducción a la biblioteca GLib para desarrollo en C

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

Etiquetas: GLib C desarrollo programación estructuras-datos

Publicado el 6-17 18:01