Módulos ffi, proceso, env, señales — Sistema e Interoperabilidad
Archivos: stdlib/std/ffi.fa, stdlib/std/proceso.fa, stdlib/std/env.fa, stdlib/std/señales.fa, stdlib/std/ruta.fa, stdlib/std/arg.fa
¿Por qué existen?
Estos módulos proveen interoperabilidad con el sistema operativo y otros lenguajes. ffi permite llamar funciones C desde Forja, proceso ejecuta comandos externos, env maneja variables de entorno, señales maneja señales del SO, ruta manipula rutas de archivos, y arg accede a argumentos de línea de comandos.
Módulo ffi — Foreign Function Interface
Permite cargar librerías dinámicas (.dll, .so, .dylib) y llamar funciones C desde Forja:
| Función | Descripción |
ffi.cargar_biblioteca(ruta) | Carga una librería dinámica |
ffi.obtener_funcion(lib, nombre) | Obtiene un puntero a función por nombre |
ffi.llamar(funcion, args) | Llama una función FFI con argumentos |
ffi.convertir_texto(texto) | Convierte string Forja a puntero C (char*) |
ffi.liberar_biblioteca(lib) | Libera la librería cargada |
Módulo proceso — Ejecución de Comandos
| Función | Descripción |
proceso.ejecutar(comando) | Ejecuta un comando y espera su finalización |
proceso.ejecutar_con_args(comando, args) | Ejecuta un comando con argumentos separados |
proceso.obtener_salida(comando) | Ejecuta y captura stdout como string |
proceso.obtener_salida_error(comando) | Ejecuta y captura stdout y stderr |
proceso.spawn(comando, args) | Inicia un proceso en segundo plano |
proceso.esta_vivo(pid) | Verifica si un proceso sigue ejecutándose |
Módulo env — Variables de Entorno
| Función | Descripción |
env.obtener(nombre) | Obtiene el valor de una variable de entorno (retorna Opcion) |
env.asignar(nombre, valor) | Asigna una variable de entorno |
env.eliminar(nombre) | Elimina una variable de entorno |
env.listar() | Lista todas las variables de entorno como mapa |
Módulo señales — Manejo de Señales del SO
| Función | Descripción |
señales.manejar(señal, manejador) | Registra un manejador para una señal |
señales.enviar(pid, señal) | Envía una señal a un proceso |
señales.SIGTERM | Constante: señal de terminación |
señales.SIGINT | Constante: señal de interrupción (Ctrl+C) |
señales.SIGKILL | Constante: señal de matar proceso |
Módulo ruta — Manipulación de Rutas
| Función | Descripción |
ruta.unir(ruta1, ruta2) | Une dos componentes de ruta (path join) |
ruta.directorio_padre(ruta) | Obtiene el directorio padre (dirname) |
ruta.nombre_archivo(ruta) | Obtiene el nombre del archivo (basename) |
ruta.extension(ruta) | Obtiene la extensión del archivo |
ruta.absoluta(ruta) | Convierte a ruta absoluta |
Módulo arg — Argumentos de Línea de Comandos
| Función | Descripción |
arg.obtener() | Retorna un arreglo con todos los argumentos |
arg.cantidad() | Retorna la cantidad de argumentos |
arg.obtener_si(indice) | Retorna un argumento por índice (Opcion) |
Casos de uso
- FFI: Usar librerías C existentes desde Forja (OpenGL, SDL, etc.)
- Scripting: Ejecutar herramientas del sistema desde Forja
- CLI tools: Acceder a argumentos y entorno para programas de línea de comandos
- Daemons: Manejar señales para graceful shutdown
💡 Portabilidad: Los módulos ruta y proceso manejan automáticamente las diferencias entre Windows (\), Linux/macOS (/) para rutas y ejecutables.