获取 file:get_cwd() 的 {error, enoent} 的常见原因有哪些?

问题描述 投票:0回答:1

我正在使用

file:get_cwd()/0
,并且我看到了错误,即
{error, enoent}
。导致此错误的根本问题可能是什么?

erlang
1个回答
7
投票

如果您查看用于在此类系统上实现 getcwd(3)

UNIX 手册页 file:get_cwd/0
,您会发现以下对 
ENOENT
错误结果的解释:

ENOENT 当前工作目录已取消链接。

换句话说,如果当前工作目录已从Erlang进程下删除,就会出现此错误。

enoent
模块
 文档中存在许多类似的 
file
解释。

尝试从

erl
shell 执行以下调用序列,假设您的系统上尚不存在目录
/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}

© www.soinside.com 2019 - 2024. All rights reserved.