Если вы посмотрите страницу руководства UNIX для getcwd(3)
, которая используется для реализации file:get_cwd/0
в таких системах, вы найдете следующее объяснение результата ошибки ENOENT
:
ENOENT Текущий рабочий каталог не был связан.
Другими словами, эта ошибка возникает, если текущий рабочий каталог был удален из-под процесса Erlang. Ряд аналогичных объяснений enoent
существует в документации для модуля file
.
Попробуйте выполнить следующую последовательность вызовов из оболочки erl
, предполагая каталог /tmp/foo
еще не существует в вашей системе:
1> file:make_dir("/tmp/foo").
ok
2> cd("/tmp/foo").
/tmp/foo
ok
3> file:get_cwd().
{ok,"/tmp/foo"}
4> file:del_dir("/tmp/foo").
ok
5> file:get_cwd().
{error,enoent}
Эта последовательность сначала создает новый каталог /tmp/foo
и изменяет рабочий каталог процесса erl
на него. Первый вызов file:get_cwd()
подтверждает, что, как и ожидалось, /tmp/foo
является рабочим каталогом. Затем каталог удаляется через звонок на file:del_dir/1
. Поскольку рабочий каталог больше не существует, второй вызов file:get_cwd()
возвращает {error,enoent}
.