名称

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 贡献政策。