摘要
將封包排入通訊埠佇列。
宣告
#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()
會將使用者「封包」排入處理常式指定的通訊埠。
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
聯集元素視為有效:
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
帳號代碼並非通訊埠控制代碼。
ZX_ERR_ACCESS_DENIED
帳號代碼沒有 ZX_RIGHT_WRITE
。