接口

GioPollableInputStream

自 2.28 版开始

描述 [源]

interface Gio.PollableInputStream : Gio.InputStream

GPollableInputStream 由实现可轮询以读取的 GInputStream 实现。这可以在与非 GIO API 进行接口交互时使用,该 API 预期 UNIX 文件描述符风格的异步 I/O 而不是 GIO 风格。

某些类可能实现 GPollableInputStream 但只有该类的特定实例是可轮询的。如果 g_pollable_input_stream_can_poll() 返回 false,则其他 GPollableInputStream 方法的行为将是未定义的。

自 2.28 版开始

先决条件

为了实现 PollableInputStream,您的类型必须继承自 GInputStream

实例方法

g_pollable_input_stream_can_poll

检查 stream 是否实际可轮询。某些类可能实现 GPollableInputStream 但只有该类的特定实例是可轮询的。如果此方法返回 FALSE,则其他 GPollableInputStream 方法的操作是未定义的。

自 2.28 版开始

g_pollable_input_stream_create_source

创建一个在 stream 可读时、cancellable 被触发或发生错误时触发的 GSource。源上的回调为 GPollableSourceFunc 类型。

自 2.28 版开始

g_pollable_input_stream_is_readable

检查 stream 是否可读。

自 2.28 版开始

g_pollable_input_stream_read_nonblocking

尝试从 stream 读取最多 count 个字节到 buffer 中,就像在 g_input_stream_read() 中一样。如果 stream 当前不可读,则会立即返回 G_IO_ERROR_WOULD_BLOCK,您可以使用 g_pollable_input_stream_create_source() 创建将在 stream 可读时触发的 GSource

接口结构

struct GioPollableInputStreamInterface {
  GTypeInterface g_iface;
  gboolean (* can_poll) (
    GPollableInputStream* stream
  );
  gboolean (* is_readable) (
    GPollableInputStream* stream
  );
  GSource* (* create_source) (
    GPollableInputStream* stream,
    GCancellable* cancellable
  );
  gssize (* read_nonblocking) (
    GPollableInputStream* stream,
    void* buffer,
    gsize count,
    GError** error
  );
  
}

可轮询输入流的接口。

can_poll 的默认实现始终返回 TRUE

read_nonblocking 的默认实现调用 g_pollable_input_stream_is_readable(),然后根据返回值为 TRUE 时调用 g_input_stream_read()。这意味着如果您的 is_readable 实现可能在流实际不可读时返回 TRUE,则您只需要重写它。

接口成员
g_iface
GTypeInterface
 

父接口。

can_poll
gboolean (* can_poll) (
    GPollableInputStream* stream
  )
 

检查 GPollableInputStream 实例是否实际上是可轮询的。

is_readable
gboolean (* is_readable) (
    GPollableInputStream* stream
  )
 

检查流是否可读。

create_source
GSource* (* create_source) (
    GPollableInputStream* stream,
    GCancellable* cancellable
  )
 

创建一个用于轮询流的 GSource

read_nonblocking
gssize (* read_nonblocking) (
    GPollableInputStream* stream,
    void* buffer,
    gsize count,
    GError** error
  )
 

执行非阻塞读取,或返回 G_IO_ERROR_WOULD_BLOCK

虚拟方法

Gio.PollableInputStream.can_poll

检查 stream 是否实际可轮询。某些类可能实现 GPollableInputStream 但只有该类的特定实例是可轮询的。如果此方法返回 FALSE,则其他 GPollableInputStream 方法的操作是未定义的。

自 2.28 版开始

Gio.PollableInputStream.create_source

创建一个在 stream 可读时、cancellable 被触发或发生错误时触发的 GSource。源上的回调为 GPollableSourceFunc 类型。

自 2.28 版开始

Gio.PollableInputStream.is_readable

检查 stream 是否可读。

自 2.28 版开始

Gio.PollableInputStream.read_nonblocking

尝试从 stream 读取最多 count 个字节到 buffer 中,就像在 g_input_stream_read() 中一样。如果 stream 当前不可读,则会立即返回 G_IO_ERROR_WOULD_BLOCK,您可以使用 g_pollable_input_stream_create_source() 创建将在 stream 可读时触发的 GSource