接口

GioPollableOutputStream

自:2.28

描述 [源代码]

interface Gio.PollableOutputStream : Gio.OutputStream

GPollableOutputStream由可以实现轮询写入就绪状态的自定义GOutputStream实现。当与非GIO API进行交互,该API期望使用Unix文件描述符风格的异步I/O而不是GIO-style时,这非常有用。

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

自:2.28

先决条件

为了实现PollableOutputStream,您的类型必须继承自GOutputStream

实例方法

g_pollable_output_stream_can_poll

检查是否可以轮询stream。某些类可能实现了GPollableOutputStream,但只有该类的某些实例是可轮询的。如果此方法返回FALSE,则其他GPollableOutputStream方法的行为未定义。

自:2.28

g_pollable_output_stream_create_source

创建一个在stream可以写入或cancellable触发或发生错误时触发的GSource。源上的回调是GPollableSourceFunc类型。

自:2.28

g_pollable_output_stream_is_writable

检查是否可以写入stream

自:2.28

g_pollable_output_stream_write_nonblocking

尝试从buffer将多达count个字节写入stream,就如同使用g_output_stream_write()。如果stream当前不可写入,此操作将立即返回G_IO_ERROR_WOULD_BLOCK,然后您可以使用g_pollable_output_stream_create_source()来创建一个将在stream可写入时触发的GSource

g_pollable_output_stream_writev_nonblocking

尝试将包含在n_vectors vectors中的字节写入stream,就如同使用g_output_stream_writev()。如果stream当前不可写入,此操作将立即返回<%=code>G_POLLABLE_RETURN_WOULD_BLOCK,并您可以使用g_pollable_output_stream_create_source()来创建一个将在stream可写入时触发的GSource。在这种情况下不会设置error

自:2.60

接口结构

struct GioPollableOutputStreamInterface {
  GTypeInterface g_iface;
  gboolean (* can_poll) (
    GPollableOutputStream* stream
  );
  gboolean (* is_writable) (
    GPollableOutputStream* stream
  );
  GSource* (* create_source) (
    GPollableOutputStream* stream,
    GCancellable* cancellable
  );
  gssize (* write_nonblocking) (
    GPollableOutputStream* stream,
    void* buffer,
    gsize count,
    GError** error
  );
  GPollableReturn (* writev_nonblocking) (
    GPollableOutputStream* stream,
    const GOutputVector* vectors,
    gsize n_vectors,
    gsize* bytes_written,
    GError** error
  );
  
}

轮询输出流接口。

can_poll的默认实现总是返回TRUE

write_nonblocking 的默认实现会调用 g_pollable_output_stream_is_writable(),如果返回 TRUE 则会调用 g_output_stream_write()。这意味着只有当你的 is_writable 实现可能在流实际上不可写时返回 TRUE 的情况下才需要重写它。

writev_nonblocking 的默认实现会为每个向量调用 g_pollable_output_stream_write_nonblocking(),并将返回值和错误(如果设置了)转换为 GPollableReturn。在可能的情况下,你应该重写这一实现以避免分配 GError 来返回 G_IO_ERROR_WOULD_BLOCK

接口成员
g_iface
GTypeInterface
 

父接口。

can_poll
gboolean (* can_poll) (
    GPollableOutputStream* stream
  )
 

检查 GPollableOutputStream 实例是否可以被轮询。

is_writable
gboolean (* is_writable) (
    GPollableOutputStream* stream
  )
 

检查流是否可写。

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

创建一个 GSource 以轮询流。

write_nonblocking
gssize (* write_nonblocking) (
    GPollableOutputStream* stream,
    void* buffer,
    gsize count,
    GError** error
  )
 

执行非阻塞写入或返回 G_IO_ERROR_WOULD_BLOCK

writev_nonblocking
GPollableReturn (* writev_nonblocking) (
    GPollableOutputStream* stream,
    const GOutputVector* vectors,
    gsize n_vectors,
    gsize* bytes_written,
    GError** error
  )
 

执行向量非阻塞写入,或返回 G_POLLABLE_RETURN_WOULD_BLOCK

虚方法

Gio.PollableOutputStream.can_poll

检查是否可以轮询stream。某些类可能实现了GPollableOutputStream,但只有该类的某些实例是可轮询的。如果此方法返回FALSE,则其他GPollableOutputStream方法的行为未定义。

自:2.28

Gio.PollableOutputStream.create_source

创建一个在stream可以写入或cancellable触发或发生错误时触发的GSource。源上的回调是GPollableSourceFunc类型。

自:2.28

Gio.PollableOutputStream.is_writable

检查是否可以写入stream

自:2.28

Gio.PollableOutputStream.write_nonblocking

尝试从buffer将多达count个字节写入stream,就如同使用g_output_stream_write()。如果stream当前不可写入,此操作将立即返回G_IO_ERROR_WOULD_BLOCK,然后您可以使用g_pollable_output_stream_create_source()来创建一个将在stream可写入时触发的GSource

Gio.PollableOutputStream.writev_nonblocking

尝试将包含在n_vectors vectors中的字节写入stream,就如同使用g_output_stream_writev()。如果stream当前不可写入,此操作将立即返回<%=code>G_POLLABLE_RETURN_WOULD_BLOCK,并您可以使用g_pollable_output_stream_create_source()来创建一个将在stream可写入时触发的GSource。在这种情况下不会设置error

自:2.60