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ónDescripció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ónDescripció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ónDescripció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ónDescripció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.SIGTERMConstante: señal de terminación
señales.SIGINTConstante: señal de interrupción (Ctrl+C)
señales.SIGKILLConstante: señal de matar proceso

Módulo ruta — Manipulación de Rutas

FunciónDescripció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ónDescripció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

💡 Portabilidad: Los módulos ruta y proceso manejan automáticamente las diferencias entre Windows (\), Linux/macOS (/) para rutas y ejecutables.