摘要
将数据包加入队列。
声明
#include <zircon/syscalls.h>
#include <zircon/syscalls/port.h>
zx_status_t zx_port_queue(zx_handle_t handle, const zx_port_packet_t* packet);
说明
zx_port_queue()
将用户数据包加入到由 handle 指定的端口排队。
用户数据包由 zx_port_wait()
排空。未能排空
及时获取可能会导致过度使用内核内存,从而可能
异常。如需了解详情,请参阅 IPC 限制。
typedef struct zx_port_packet {
uint64_t key;
uint32_t type;
zx_status_t status;
union {
zx_packet_user_t user;
zx_packet_signal_t signal;
};
} zx_port_packet_t;
在 packet 中,type 应为 ZX_PKT_TYPE_USER
,并且只有 user
即可视为有效的 union 元素:
typedef union zx_packet_user {
uint64_t u64[4];
uint32_t u32[8];
uint16_t u16[16];
uint8_t c8[32];
} zx_packet_user_t;
权限
handle 的类型必须为 ZX_OBJ_TYPE_PORT
且包含 ZX_RIGHT_WRITE
。
返回值
zx_port_queue()
在数据包成功加入队列时返回 ZX_OK
。
错误
“ZX_ERR_BAD_HANDLE
”的句柄不是有效的句柄
ZX_ERR_INVALID_ARGS
packet 是无效的指针。
ZX_ERR_WRONG_TYPE
handle 不是端口句柄。
ZX_ERR_ACCESS_DENIED
句柄没有 ZX_RIGHT_WRITE
。