zxport_queue

摘要

将数据包加入队列。

声明

#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

另请参阅