向 Erlang 驱动程序发送术语而不是 iolists
是否有相当于 driver_output_term
的内容其他方向,即将 Erlang 术语发送给驱动程序而不首先将其转换为 iolist?如果没有,我大概应该使用 term_to_binary
转换我的术语,并使用 ei
在 C 端解析它;有什么好的例子吗?
Is there an equivalent of driver_output_term
in the other direction, i.e. sending an Erlang term to the driver without converting it to an iolist first? If not, I presumably should convert my term using term_to_binary
and parse it on the C side with ei
; any good examples?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
根据文档,您只能发送 iodata() 格式的内容。
如果您想要发送到驱动程序的只是整数和字符串,那么使用您自己的 term-to-iodata 编码可能会更有效(并且更容易),如 本教程来自 Erlang 文档。它们使用函数将调用转换为可以直接发送到驱动程序的映射,因此不需要使用
term_to_binary()
进行编码。如果 X 和 Y 被假定为小整数,则此映射是可行的。
在 C 端,输入缓冲区的第一个字节被打开,以使用第二个字节作为参数来调用适当的函数:
According to the docs, you can only send stuff that's in
iodata()
format.If all you want send to the driver is integers and strings, it might be more efficient (and a lot easier) to use your own term-to-iodata encoding, as in this tutorial from the Erlang documentation. They use a function to convert their calls to a mapping that can be sent to the driver directly and therefore doesn't need to be encoded using
term_to_binary()
.This mapping is feasible if
X
andY
are assumed to be small integers.On the C side, the first byte of the input buffer is switched upon to call the appropriate function using the second byte as the argument: