如何从 POSIX 文件描述符中获取 TextIO.instream?
How do I get a TextIO.instream from a POSIX file descriptor?
如果我有 POSIX 类型 Posix.FileSys.file_desc
的文件描述符,如何将其转换为 TextIO.instream
?我想做
的反向操作
这样就可以了。它需要 instream 的“名称”,basis library claims 用于显示给用户的错误消息。所以我建议使用底层文件的名称或路径,如果有的话。
fun fdToInstream (name: string, fd: Posix.FileSys.file_desc) : TextIO.instream =
let
val (flags, _) = Posix.IO.getfl fd
val isNonBlockMode = Posix.IO.O.anySet (Posix.IO.O.nonblock, flags)
val reader: TextIO.StreamIO.reader =
Posix.IO.mkTextReader
{ fd = fd
, name = name
, initBlkMode = not isNonBlockMode
}
val stream_ins: TextIO.StreamIO.instream =
TextIO.StreamIO.mkInstream (reader, "")
in
TextIO.mkInstream stream_ins
end
如果我有 POSIX 类型 Posix.FileSys.file_desc
的文件描述符,如何将其转换为 TextIO.instream
?我想做
这样就可以了。它需要 instream 的“名称”,basis library claims 用于显示给用户的错误消息。所以我建议使用底层文件的名称或路径,如果有的话。
fun fdToInstream (name: string, fd: Posix.FileSys.file_desc) : TextIO.instream =
let
val (flags, _) = Posix.IO.getfl fd
val isNonBlockMode = Posix.IO.O.anySet (Posix.IO.O.nonblock, flags)
val reader: TextIO.StreamIO.reader =
Posix.IO.mkTextReader
{ fd = fd
, name = name
, initBlkMode = not isNonBlockMode
}
val stream_ins: TextIO.StreamIO.instream =
TextIO.StreamIO.mkInstream (reader, "")
in
TextIO.mkInstream stream_ins
end