摘要
從核心偵錯記錄檔讀取單一記錄檔記錄。
宣告
#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_size 個位元組的 buffer。
options 必須設為 0。
成功時,系統會將 zx_log_record_t 類型的單一記錄寫入至
buffer。記錄長度 (以位元組為單位) 則以 Syscall 的
傳回值。
傳回的記錄將採用以下格式:
typedef struct zx_log_record {
  uint64_t sequence;
  uint32_t unused;
  uint16_t datalen;
  uint8_t severity;
  uint8_t flags;
  zx_instant_boot_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。 | 
| 時間戳記 | 說明首次寫入這筆記錄時間的時間戳記。 | 
| pid | 寫入此記錄檔記錄的程序失敗,或
如果記錄是由核心產生,則為 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  帳號代碼不是有效的帳號代碼。
ZX_ERR_INVALID_ARGS 為 options 輸入的值無效,或 buffer
是無效的指標
ZX_ERR_SHOULD_WAIT 偵錯記錄沒有可讀取的記錄。
ZX_ERR_WRONG_TYPE  處理常式不是偵錯記錄控制代碼。