Erlang R16B之前的驱动程序\u异步\u端口\u密钥替代方案
根据, 在OTP-R16之前,实际的端口id可以用作具有适当强制转换的密钥,但在重写端口子系统之后,情况就不再如此了。使用此功能,您可以基于端口id实现与OTP-R16之前相同的分发Erlang R16B之前的驱动程序\u异步\u端口\u密钥替代方案,erlang,erlang-driver,Erlang,Erlang Driver,根据, 在OTP-R16之前,实际的端口id可以用作具有适当强制转换的密钥,但在重写端口子系统之后,情况就不再如此了。使用此功能,您可以基于端口id实现与OTP-R16之前相同的分发 什么是正确的类型转换?类型是指向结构的指针的类型定义。要在较旧的驱动程序应用程序中获取无符号int异步密钥类型,需要将此指针类型转换为无符号int。实现这一点的一种方法是通过C99uintpttr\u t类型强制转换它,该类型保证足够大以容纳指针值: #include <stdint.h> #inclu
什么是正确的类型转换?类型是指向结构的指针的类型定义。要在较旧的驱动程序应用程序中获取
无符号int
异步密钥类型,需要将此指针类型转换为无符号int
。实现这一点的一种方法是通过C99uintpttr\u t
类型强制转换它,该类型保证足够大以容纳指针值:
#include <stdint.h>
#include "erl_driver.h"
unsigned int my_port_key(ErlDrvPort port)
{
return (unsigned int) (uintptr_t) port;
}
“您可以使用erl_driver.h中提供的驱动程序API版本控制信息编写一个可移植函数来返回异步密钥。”是的,这就是我的计划。谢谢
#include <stdint.h>
#include "erl_driver.h"
unsigned int my_port_key(ErlDrvPort port)
{
#if ERL_DRV_EXTENDED_MAJOR_VERSION > 2 || \
(ERL_DRV_EXTENDED_MAJOR_VERSION == 2 && ERL_DRV_EXTENDED_MINOR_VERSION >= 2)
return driver_async_port_key(port);
#else
return (unsigned int) (uintptr_t) port;
#endif
}