0
據erl_driver documentation for driver_async_port_key
function,預R16B driver_async_port_key替代
OTP-R16之前,實際的端口號可以作爲適當鑄造的關鍵,但端口子系統的重寫後,這不再案子。使用此功能,您可以像以前的OTP-R16一樣根據端口ID實現相同的分配。
什麼是適當的鑄造?
據erl_driver documentation for driver_async_port_key
function,預R16B driver_async_port_key替代
OTP-R16之前,實際的端口號可以作爲適當鑄造的關鍵,但端口子系統的重寫後,這不再案子。使用此功能,您可以像以前的OTP-R16一樣根據端口ID實現相同的分配。
什麼是適當的鑄造?
ErlDrvPort
類型是指向結構體的指針的typedef。要在較舊的驅動程序應用程序中獲取unsigned int
異步密鑰類型,您需要將此指針類型轉換爲unsigned int
。實現這一目標的方法之一是通過C99 uintptr_t
類型,它是保證大到足以容納一個指針的值來施放它:
#include <stdint.h>
#include "erl_driver.h"
unsigned int my_port_key(ErlDrvPort port)
{
return (unsigned int) (uintptr_t) port;
}
可以使用驅動程序API版本編寫的便攜函數返回一個異步鍵信息可在erl_driver.h
。該driver_async_port_key
功能是在驅動程序API 2.2版本推出,所以我們可以使用2.2或更新的版本時要調用driver_async_port_key
,或退回到鑄造方法對舊版本:
#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
}
「你可以寫一個便攜式函數返回一個使用erl_driver.h中提供的驅動程序API版本信息的異步密鑰。「是的,這就是我的計劃。謝謝! – 2014-10-17 14:44:05