Directorio de trabajo
From Wikipedia, the free encyclopedia
En computación el directorio de trabajo de un proceso es un directorio de un sistema de archivos jerárquico, si lo hay[nb 1], dinámicamente asociado a cada proceso. También es llamado el directorio actual de trabajo (CWD por sus siglas en inglés: current working directory) o simplemente directorio actual.[1]
Cuándo un proceso se refiere a un archivo usando un nombre de archivo simple o una ruta relativa (a diferencia de una ruta absoluta que parte de un directorio raíz, la referencia es interpretada como relativa al directorio de trabajo del proceso. Así, por ejemplo, un proceso con un directorio de trabajo /mi-carpeta que intenta crear el archivo prueba.txt terminará creando el archivo /mi-carpeta/prueba.txt
En la mayoría de las interfaces de línea de comandos de DOS y UNIX, así como en el intérprete de línea de comandos cmd.exe y PowerShell de Windows, el directorio de trabajo se puede cambiar utilizando los comandos cd o chdir. En Unix, el comando pwd devuelve la ruta completa del directorio de trabajo, mientras en DOS y Windows se puede obtener lanzando los comandos cd o chdir sin ningún argumento o parámetro ( mientras que en Unix lanzar el comando cd sin argumentos llevará al usuario a su carpeta de usuario).
En scripts, para conocer el directorio actual, se puede utilizar la variable de entorno PWD (en shells Unix/Linux), o la pseudo variable de entorno CD en command.com y cmd.exe de Windows, pero no en OS/2 ni DOS. También _CWD, _CWDS, _CWP y _CWPS (bajo 4DOS, 4OS2, 4NT etc.)[2]. De esta manera no se necesita iniciar un programa externo para tener esta habilidad.
En BSD se puede utilizar la función getcwd[3].
COMMAND.COM en DR-DOS 7.02 y superiores provee el comando ECHOS, una variante del comando ECHO que omite el avance de línea final.[4][2] Esto puede utilizarse para crear un trabajo en batch temporal almacenando el directorio de trabajo en una variable de entorno, como CD para su uso posterior, por ejemplo:
ECHOS SET CD=> SETCD.BAT CHDIR >> SETCD.BAT CALL SETCD.BAT DEL SETCD.BAT
De manera alternativa, en DOS Multiusuario y DR-DOS 7.02 o superior, varios comandos internos y externos soportan el argumento /B (de "Batch").[5] Esto modifica la salida de los comandos para que sea adecuada como entrada directa de la línea de comandos (cuando se redirecciona a un archivo batch) o para ser utilizada como parámetro para otros comandos. Dónde CHDIR emitiría una ruta como C:\DOS, un command como CHDIR /B emitiría en su lugar CHDIR C:\DOS, de manera que CHDIR /B > RETDIR.BAT crearía un trabajo batch temporal que permita retornar a esta carpeta más adelante.
El directorio de trabajo también es mostrado por el token $P[nb 2] del comando prompt.[6] Para mantener un prompt corto dentro de estructuras de subdirectorios muy profundas, el command.com de DR-DOS 7.07 soporta el token $W[nb 2] para desplegar solamente el nivel de subdirectorio más profundo. Dónde el PROMPT $P$G, que es el default, resultaría en algo como C:\DOS> or C:\DOS\DRDOS>, un PROMPT $N:$W$G resultaría en C:DOS> y C:DRDOS>, respectivamente. La misma facilidad (usando $W y $w) fue añadida también a 4DOS.[2]
Bajo DOS, la ruta absoluta de los directorios de trabajo de todos los volúmenes lógicos se almacena internamente en una estructura tipo arreglo llamada la Estructura de directorio actual (CDS por sus siglas en inglés: Current Directory Structure), que se asigna dinámicamente en tiempo de arranque para contener el número de elementos necesarios para todas las unidades lógicas (o lo que se haya definido en la directiva LASTDRIVE de CONFIG.SYS.[7][8][9]
Esta estructura impone un límite de 66 caracteres como longitud máxima de la ruta completa en cada directorio de trabajo e, implicitamente, limita también la máxima profundidad de subdirectorios disponible.[7] DOS Plus y anteriores versiones de DR DOS (hasta DR DOS 6.0, con BDOS 6.7 en 1991) no tienen dicha limitación[8][10][2] gracias a su implementación utilizando DOS emulation sobre un DOS Concurrente- (y también el kernel derivado CP/M-86-), que internamente organiza los sub-directorios como vínculos relativos a los directorios padre, en lugar de como rutas absolutas.[8][10] Desde que PalmDOS (con BDOS 7.0) y DR DOS 6.0 (1992 update con BDOS 7.1) y superiores cambiaron para utilizar CDS para máxima compatibilidad con programas DOS, enfrentaron las mismas limitaciones presentes en otros DOS.[8][10]
En lenguajes de programación
La mayoría de lenguajes de programación provee una interfaz a las funciones del sistema de archivos del sistema operativo, incluyendo la habilidad de consultar y cambiar el directorio de trabajo del programa.
En el lenguaje C, la función POSIX chdir() efectúa la llamada al sistema que cambia el directorio de trabajo.[11] Toma como argumento una cadena de caracteres con la ruta al nuevo directorio. Esta ruta puede ser absoluta o relativa al directorio actual al momento de la llamada. Cuando esta función está disponible, puede ser llamada por un proceso para establecer su directorio de trabajo.
Existe una función equivalente en otros lenguajes. En Visual Basic usualmente se llama CHDIR().
En Delphi/Object pascal la función se llama ChDir()[12].
A diferencia del API de Windows y la función del lenguaje C, ni el lenguaje de programación Java ni la Máquina virtual Java soportan directamente chdir(). Una solicitud de cambio se mantuvo abierta por más de una década mientras el equipo responsable de Java consideraba las alternativas, sin embargo para el 2008 la solicitud fue denegada después de haber introducido un soporte muy limitado (afectando primero java.lang.Runtime y después java.lang.ProcessBuilder).[13]
Véase también
- Carpeta de usuario
- Directorio raíz
- Directorio
- chroot (Sistemas Linux y derivados)
- Nombre de archivo