Как программа в определенном месте?
При написании программы она работает в определенном каталоге, который является текущим рабочим каталогом.
Я пытаюсь понять больше об идее cwd. Как программа узнает, что это за cwd? Где хранится эта информация?
Я прекрасно знаю, как использовать os
модуль в Python, но я не очень понимаю, что значит иметь CWD. Это просто атрибут данных, "это то, где мы находимся", который мы можем произвольно изменить? И мы просто ищем вещи и создаем вещи в этом конкретном разделе HD? Или какой-то путь действительно активно открывается и закрывается, когда мы меняем cwd, как закрывающаяся дверь и открывающаяся другая?
Что происходит на компьютере, когда я меняю cwd в программе?
Это может быть не зависит от языка, я не уверен.
1 ответ
Текущий рабочий каталог (по крайней мере, в большинстве операционных систем) является атрибутом процесса, так что да, это более или менее простой атрибут, утверждающий, что "это то, где мы находимся". Поскольку это атрибут процесса, он хранится и управляется ядром ОС.
Его можно изменить произвольно, вызвав, например, os.chdir в python, и оболочка аналогичным образом изменит свой рабочий каталог при каждом запуске встроенной cd
команда. И они оба обычно вызывают один и тот же API операционной системы, например, chdir(). Изменение cwd зависит от разрешений файловой системы, поэтому вы можете изменить только рабочий каталог на путь, который действительно существует, и у вас есть права доступа.
Cwd также может участвовать в файловых операциях, поскольку, когда процесс открывает путь к файлу, который не является абсолютным, имя файла будет разрешено относительно cwd процесса.
В системах Unix cwd наследуется от родительского процесса, так как у cwd процесса, который вы запускаете из оболочки, будет свой cwd в каталог, в котором вы находитесь при запуске процесса (а не, например, каталог исполняемого файла, который вы запускаете)).