名称
zmq_msg_init_data - 从提供的缓冲区初始化 0MQ 消息
概要
typedef void (zmq_free_fn) (void '*data', void '*hint');
int zmq_msg_init_data (zmq_msg_t '*msg', void '*data', size_t 'size', zmq_free_fn '*ffn', void '*hint');
描述
zmq_msg_init_data() 函数将初始化 'msg' 引用的消息对象,使其代表 'data' 地址处、长度为 'size' 字节的缓冲区内容。不会对 'data' 进行复制,且 0MQ 将获得所提供缓冲区的所有权。
如果提供了去分配函数 'ffn',则当 0MQ 不再需要该数据缓冲区时,将使用传递给 zmq_msg_init_data() 的 'data' 和 'hint' 参数调用该函数。
注意
|
切勿直接访问 'zmq_msg_t' 的成员,而应始终使用 zmq_msg 函数族。 |
注意
|
去分配函数 'ffn' 需要是线程安全的,因为它将从任意线程中调用。 |
注意
|
如果没有提供去分配函数,分配的内存将不会被释放,这可能导致内存泄漏。 |
注意
|
函数 zmq_msg_init()、zmq_msg_init_data()、zmq_msg_init_size() 和 zmq_msg_init_buffer() 是互斥的。切勿对同一个 'zmq_msg_t' 初始化两次。 |
返回值
zmq_msg_init_data() 函数成功时应返回零。否则,它应返回 -1
并将 'errno' 设置为以下定义的值之一。
错误
- ENOMEM
-
没有足够的存储空间可用。
示例
从提供的缓冲区初始化消息
void my_free (void *data, void *hint) { free (data); } /* ... */ void *data = malloc (6); assert (data); memcpy (data, "ABCDEF", 6); zmq_msg_t msg; rc = zmq_msg_init_data (&msg, data, 6, my_free, NULL); assert (rc == 0);
作者
本页由 0MQ 社区编写。如需修改,请阅读位于 https://zeromq.cn/how-to-contribute/ 的 0MQ 贡献政策。