Nyx con Ejemplos

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.

← Anterior Siguiente →

Source: examples/by-example/68-process-control.nx