我正在打开一个文件:
{ok, FD} = file:open(AcctFile, [binary, raw, read, {read_ahead, ?ACCT_READAHEAD_SZ}])
我打印FD并看到类似:{file_descriptor,prim_file,{#Port<0.421>,16}}
的内容
我现在生成一个进程并将文件描述符传递给它:
spawn_link(fun() -> get_accts(AcctFile, FD, #bookmark{needsrefresh = true}) end).
在get_accts
我打印FD,它与上面相同。
然而,此FD上的file:read_line
和其他文件操作只是挂起(如果我在将它们传递给生成的进程之前在FD上调用它们,它们就会起作用。)发生了什么?
答案 0 :(得分:2)
这是因为您以raw
模式打开了文件。以raw
模式打开的文件不能在不同的进程中使用(来自打开它的进程)。
来自Erlang file
module documentation:
原始
- 。 。
- 只有打开文件的Erlang进程才能使用它。