类
GioIOStream
从 2.22 开始
描述 [src]
abstract class Gio.IOStream : GObject.Object
{
/* No available fields */
}
GIOStream
表示具有读写流的对象。通常,这两个流充当独立的输入和输出流,但它们共享一些公共资源和状态。例如,对于可寻址流,这两个流都可以使用相同 的位置。
GIOStream
对象的示例有 GSocketConnection
(它表示双向网络连接);以及 GFileIOStream
(它表示以读写 模式打开的文件句柄)。
要执行实际的读取和写入,您需要使用 g_io_stream_get_input_stream()
和 g_io_stream_get_output_stream()
获取子流。
GIOStream
对象拥有输入和输出流,而不是反过来,因此保持子流存在不会使 GIOStream
对象存在。如果 GIOStream
对象被释放,它将被关闭,从而关闭子流,因此即使子流保持存在,它们仍会始终对所有 操作返回 G_IO_ERROR_CLOSED
。
要关闭流,请使用 g_io_stream_close()
,它将关闭通用流对象以及各个子流。您还可以关闭各个子流本身。在大多数情况下,这只会将子流标记为已关闭,因此其进一步的 I/O 操作会失败,但 GIOStream
中的通用状态仍可能是打开的。然而,某些流可能支持“半关闭”的状态,其中流的一个方向实际上已 关闭。
在 GIOStream
或其子流上的另一个操作仍在进行时,无法启动对 GIOStream
的操作。具体来说,应用程序可以同时从 GInputStream
读取并写入 GOutputStream
(在单独的线程中或作为同一线程中的异步操作),但应用程序无法在 GIOStream
、GInputStream
或 GOutputStream
操作进行时启动任何 GIOStream
操作,并且应用程序无法在 GIOStream
操作进行时启动任何 GInputStream
或 GOutputStream
操作。
这是与给定的 GMainContext
(操作开始时的线程默认上下文)关联的个别流操作产品的产物,而非整个流与单个 GMainContext
关联。
GIO 可能从其他(工作进程)线程对 GIOStream
s 运行操作,这可能会在包装流(如 GBufferedInputStream
或 GTlsConnection
)的行为中暴露给应用程序代码。通过此类包装 API,应用程序代码仅可在包装流闲置时对基础(包装)流运行操作。请注意此类操作语义可能未明确定义,这可能是由于包装流使基础流处于的状态(尽管保证它们不会崩溃)。
可用版本:2.22
实例方法
g_io_stream_close_async
请求异步关闭流,释放与之相关的资源。操作完成后,将调用 callback
。然后可以调用 g_io_stream_close_finish()
以获取操作的结果。
从 2.22 开始
信号
从 GObject(1)继承的信号
GObject::notify
在通过 g_object_set_property()、g_object_set() 等方法为对象的某个属性设置值时,将发出信号 notify。
类结构
struct GioIOStreamClass {
GObjectClass parent_class;
GInputStream* (* get_input_stream) (
GIOStream* stream
);
GOutputStream* (* get_output_stream) (
GIOStream* stream
);
gboolean (* close_fn) (
GIOStream* stream,
GCancellable* cancellable,
GError** error
);
void (* close_async) (
GIOStream* stream,
int io_priority,
GCancellable* cancellable,
GAsyncReadyCallback callback,
gpointer user_data
);
gboolean (* close_finish) (
GIOStream* stream,
GAsyncResult* result,
GError** error
);
void (* _g_reserved1) (
void
);
void (* _g_reserved2) (
void
);
void (* _g_reserved3) (
void
);
void (* _g_reserved4) (
void
);
void (* _g_reserved5) (
void
);
void (* _g_reserved6) (
void
);
void (* _g_reserved7) (
void
);
void (* _g_reserved8) (
void
);
void (* _g_reserved9) (
void
);
void (* _g_reserved10) (
void
);
}
暂无描述。
类成员
parent_class: GObjectClass
暂无描述。
get_input_stream: GInputStream* (* get_input_stream) ( GIOStream* stream )
暂无描述。
get_output_stream: GOutputStream* (* get_output_stream) ( GIOStream* stream )
暂无描述。
close_fn: gboolean (* close_fn) ( GIOStream* stream, GCancellable* cancellable, GError** error )
暂无描述。
close_async:void (* close_async) (GIOStream* stream, int io_priority, GCancellable* cancellable, GAsyncReadyCallback callback, gpointer user_data )
暂无描述。
close_finish:gboolean (* close_finish) (GIOStream* stream, GAsyncResult* result, GError** error )
暂无描述。
_g_reserved1:void (* _g_reserved1) (void )
暂无描述。
_g_reserved2:void (* _g_reserved2) (void )
暂无描述。
_g_reserved3:void (* _g_reserved3) (void )
暂无描述。
_g_reserved4:void (* _g_reserved4) (void )
暂无描述。
_g_reserved5:void (* _g_reserved5) (void )
暂无描述。
_g_reserved6:void (* _g_reserved6) (void )
暂无描述。
_g_reserved7:void (* _g_reserved7) (void )
暂无描述。
_g_reserved8:void (* _g_reserved8) (void )
暂无描述。
_g_reserved9:void (* _g_reserved9) (void )
暂无描述。
_g_reserved10:void (* _g_reserved10) (void )
暂无描述。
Virtual 方法
Gio.IOStreamClass.close_async
请求异步关闭流,释放与之相关的资源。操作完成后,将调用 callback
。然后可以调用 g_io_stream_close_finish()
以获取操作的结果。
从 2.22 开始