Nyx provee builtins POSIX de procesos: getpid, getcwd, chdir, isatty, stat. Estos son los bloques de construcción de las herramientas de línea de comandos y de los shells.
// Process control — pid, working directory, environment // Control de procesos — pid, directorio de trabajo, entorno fn main() -> int { // Get current process ID let pid: int = getpid() print("my pid: " + int_to_string(pid)) // Get current working directory let cwd: String = getcwd() print("cwd: " + cwd) // Check if stdout is a terminal let is_tty: bool = isatty(1) if is_tty { print("stdout is a terminal") } else { print("stdout is not a terminal (piped)") } // File stat let info: Array = stat("/tmp") let is_dir: int = info[3] if is_dir == 1 { print("/tmp is a directory") } // Change directory and back let original: String = getcwd() chdir("/tmp") print("changed to: " + getcwd()) chdir(original) print("back to: " + getcwd()) return 0 }
my pid: 1501659 cwd: /tmp/demo stdout is not a terminal (piped) /tmp is a directory changed to: /tmp back to: /tmp/demo
Cómo funciona
getpid() devuelve el ID del proceso actual. getcwd() devuelve el directorio de trabajo actual como string. chdir(path) cambia el directorio de trabajo.
isatty(fd) verifica si un descriptor de archivo corresponde a un terminal. El descriptor de archivo 0 es stdin, 1 es stdout, 2 es stderr. Esto es útil para decidir si emitir códigos de color o prompts interactivos.
stat(path) devuelve metadatos de un archivo o directorio como [size, mode, mtime, is_dir, is_regular]. La bandera is_dir (índice 3) es 1 para directorios, 0 en caso contrario. Estos primitivos son los que usa un shell escrito en Nyx para sus comandos incorporados.