Control de Procesos
Nyx provee builtins POSIX de procesos: getpid, getcwd, chdir, isatty, stat. Estos son los bloques de construcción para herramientas como nyx-shell.
Código
// 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
}
Salida
my pid: 12345 cwd: /home/admin/NyxLang stdout is not a terminal (piped) /tmp is a directory changed to: /tmp back to: /home/admin/NyxLang
Explicación
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 la base de los comandos incorporados de nyx-shell.