zx_debuglog_read

摘要

从内核调试日志中读取单条日志记录。

声明

#include <zircon/syscalls.h>

zx_status_t zx_debuglog_read(zx_handle_t handle,
                             uint32_t options,
                             void* buffer,
                             size_t buffer_size);

说明

zx_debuglog_read() 尝试从内核调试中读取单条记录 登录到给定的 buffer,大小为 buffer_size 字节。

options 必须设置为 0

成功后,zx_log_record_t 类型的一条记录将写入到 缓冲区。系统调用的 返回值。

返回的记录将采用以下格式:

typedef struct zx_log_record {
  uint64_t sequence;
  uint32_t unused;
  uint16_t datalen;
  uint8_t severity;
  uint8_t flags;
  zx_time_t timestamp;
  uint64_t pid;
  uint64_t tid;
  char data[];
} zx_log_record_t;

这些字段的定义如下:

字段 说明
序列 此记录的序列号。每条记录的顺序: 数字比上述记录大 1。序列 从 0 开始。序列候选者丢弃的记录中的缺口 记录。
datalen data 字段中的数据字节数。
严重程度 此日志消息的严重性。标准严重级别为 在标头 zircon/syscalls/log.h 中定义。
标志 与此邮件相关的额外标志。标志在 标头 zircon/syscalls/log.h
timestamp 描述此记录首次写入时间的时间戳。
pid 写入此日志记录的进程的 Koid,或 如果记录由内核生成,则为 ZX_KOID_INVALID
tid 写入此日志记录的线程的 Koid,或 如果记录由内核生成,则为 ZX_KOID_INVALID
数据 日志消息,由 datalen 字节组成。日志 消息可能包含嵌入的 NUL 字符,且不是 必须以 NUL 终止。

如果 buffer_size 小于日志记录的大小,则第一个 记录的 buffer_size 字节将写入缓冲区,其余字节将写入缓冲区 已舍弃。调用方应确保其输入缓冲区至少 ZX_LOG_RECORD_MAX 个字节,以避免日志记录被截断。

权限

handle 的类型必须为 ZX_OBJ_TYPE_LOG 且包含 ZX_RIGHT_READ

返回值

zx_debuglog_read() 在成功时返回非负值,表示操作成功 写入缓冲区的字节数。失败时,错误值为负值 。

错误

ZX_ERR_ACCESS_DENIED 句柄没有 ZX_RIGHT_READ

ZX_ERR_BAD_HANDLE handle 不是有效的句柄。

ZX_ERR_INVALID_ARGSoptionsbuffer 指定的值无效 是无效的指针。

ZX_ERR_SHOULD_WAIT调试日志未包含要读取的记录。

ZX_ERR_WRONG_TYPE handle 不是调试日志句柄。

另请参阅