Каковы общие причины получения {error, enoent} для file: get_cwd ()? - PullRequest
1 голос
/ 30 сентября 2019

Я использую file:get_cwd(), и я вижу ошибки от него, то есть {error, enoent}. Что может быть основной причиной этой ошибки?

1 Ответ

4 голосов
/ 30 сентября 2019

Если вы посмотрите страницу руководства 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}.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...