В вычислениях рабочий каталог процесса — это каталог иерархической файловой системы , если таковая имеется, [nb 1], динамически связанной с процессом. Иногда его называют текущим рабочим каталогом (CWD) , например, функцией BSD [1] , или просто текущим каталогом . [2] Когда процесс ссылается на файл, используя простое имя файла или относительный путь (в отличие от файла, обозначенного полным путем от корневого каталога ), ссылка интерпретируется относительно рабочего каталога процесса. Так, например, процесс с рабочим каталогом , который запрашивает создание файла, в конечном итоге создаст файл . getcwd/rabbit-shoesfoo.txt/rabbit-shoes/foo.txt
В большинстве компьютерных файловых систем в каждом каталоге есть запись (обычно называемая « .»), указывающая на сам каталог.
В большинстве командных оболочек DOS и UNIX , а также в интерпретаторах командной строки Microsoft Windows cmd.exe и Windows PowerShell рабочий каталог можно изменить с помощью команд или . В оболочках Unix команда выводит полный путь к рабочему каталогу; эквивалентная команда в DOS и Windows — с аргументами или без них (тогда как в Unix использование без аргументов возвращает пользователя в их домашний каталог ).CDCHDIR pwdCDCHDIRcd
Переменная среды PWD (в оболочках Unix/Linux) или переменные псевдосреды CD (в Windows COMMAND.COM и cmd.exe , но не в OS/2 и DOS), или , и _CWD( _CWDSв 4DOS , 4OS2 , 4NT и т. д.). .) [3] можно использовать в скриптах, поэтому не нужно запускать внешнюю программу. Ярлыки файлов Microsoft Windows имеют возможность хранить рабочий каталог._CWP_CWPS
COMMAND.COM в DR-DOS 7.02 и выше предоставляет ECHOSвариант команды ECHOбез завершающего перевода строки. [4] [3] Это можно использовать для создания временного пакетного задания, сохраняющего рабочий каталог в переменной среды CD, например:
ECHOS SET CD=> SETCD.BATCHDIR >> SETCD.BATВЫЗОВ SETCD.BATУДАЛЕНИЕ SETCD.BAT
Альтернативно, в многопользовательской DOS и DR-DOS 7.02 и выше различные внутренние и внешние команды поддерживают параметр /B(для «Пакетной обработки»). [5] Это изменяет вывод команд, чтобы он стал пригодным для прямого ввода в командной строке (при перенаправлении его в пакетный файл) или использования в качестве параметра для других команд (использование его в качестве входных данных для другой команды). Если CHDIRбудет указан путь к каталогу, например , вместо него будет выдана C:\DOS
команда типа , так что будет создано временное пакетное задание, позволяющее вернуться в этот каталог позже.CHDIR /BCHDIR C:\DOS
CHDIR /B > RETDIR.BAT
Рабочий каталог также отображается с помощью токена $P[nb 2] команды PROMPT
[ 6] . Чтобы приглашение было коротким даже внутри глубоких структур подкаталогов, DR-DOS 7.07 COMMAND.COM поддерживает токен $W[nb 2] для отображения только самый глубокий уровень подкаталога. Таким образом, там, где значение по умолчанию PROMPT $P$Gприведет к fe в C:\DOS>
или C:\DOS\DRDOS>
, a PROMPT $N:$W$Gвместо этого приведет к C:DOS>
и C:DRDOS>
, соответственно. Аналогичная возможность (с использованием $Wи $w) была добавлена и в 4DOS . [3]
В DOS абсолютные пути к рабочим каталогам всех логических томов хранятся внутри структуры данных, напоминающей массив, называемой Current Directory Structure (CDS), которая динамически выделяется во время загрузки для хранения необходимого количества слотов для всех логических томов. диски (или как определено LASTDRIVE ). [7] [8] [9] Эта структура накладывает ограничение на длину полного пути каждого рабочего каталога в 66 символов и, таким образом, неявно также ограничивает максимально возможную глубину подкаталогов. [7] DOS Plus и более ранние выпуски DR DOS (вплоть до DR DOS 6.0 , с BDOS 6.7 в 1991 году) не имели такого ограничения [8] [10] [3] из-за их реализации с использованием эмуляции DOS поверх параллельного DOS - (и, следовательно, CP/M-86 -) производное ядро, которое внутренне организует подкаталоги как относительные ссылки на родительские каталоги, а не как абсолютные пути. [8] [10] Поскольку PalmDOS (с BDOS 7.0) и DR DOS 6.0 (обновление 1992 года с BDOS 7.1) и выше перешли на использование CDS для максимальной совместимости с программами DOS, они столкнулись с теми же ограничениями, что и в других DOS. . [8] [10]
Большинство языков программирования предоставляют интерфейс к функциям файловой системы операционной системы, включая возможность устанавливать (изменять) рабочий каталог программы.
В языке C функция POSIX выполняет системный вызов , который изменяет рабочий каталог. [11] Его аргументом является текстовая строка с путем к новому каталогу, абсолютным или относительным к старому. Там, где это возможно, процесс может вызвать его для установки своего рабочего каталога.chdir()
Подобные функции есть и в других языках. Например, в Visual Basic обычно пишется CHDIR()
.
В отличие от функции Windows API или POSIX C , ни язык программирования Java , ни виртуальная машина Java не поддерживают chdir()
напрямую; [ нужны разъяснения ] запрос на изменение оставался открытым более десяти лет, пока команда, ответственная за Java, рассматривала альтернативы, хотя к 2008 году запрос был отклонен после того, как была введена лишь ограниченная поддержка (влияя сначала java.lang.Runtime
и позже java.lang.ProcessBuilder
). [12]
MPDOSTIP.ZIP
коллекции автора, которая поддерживалась до 2001 года и в то время распространялась на многих сайтах. Предоставленная ссылка указывает на более старую версию файла, преобразованную в HTML NWDOSTIP.TXT
.) [3]