有没有办法在erlang中打开终端设备文件?
我在Solaris上,我正在尝试以下操作:
Erlang (BEAM) emulator version 5.6 [source] [64-bit] [async-threads:0] [kernel-poll:false]
/xlcabpuser1/xlc/abp/arunmu/Dolphin/ebin
Eshell V5.6 (abort with ^G)
1> file:open("/dev/pts/2",[write]).
{error,eisdir}
2> file:open("/dev/null",[write]).
{ok,}
3>
从上面可以看出,erlang文件驱动程序在打开一个空文件时没有问题,但却不能打开一个终端设备文件!!
无法得出结论,因为文件驱动程序能够打开空文件。
是否有其他方法打开终端设备文件?
谢谢
2条答案
按热度按时间bbuxkriu1#
使用io库。在这种情况下,我从GPS单元阅读:
6tr1vspr2#
更新:我能够使用端口解决下面描述的限制。例如,下面是一个将“hello world”打印到
/dev/stdout
的示例程序:这有点不方便,因为端口不像常规文件,但至少这是完成工作的一种方法。
在
efile_openfile()
(在erts/emulator/drivers/unix/unix_efile.c
)中有以下代码:如果文件不是常规文件(这是
ISREG(statbuf)
检查),则此代码(令人困惑)返回EISDIR
错误,* 除非 * 文件特别是/dev/null
。file(3)
文档指出:所以这是有记录的。我不知道为什么会有这样的限制,也许这与性能有关,因为设备驱动程序可能比普通文件阻塞的时间更长。