类
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 开始
类结构
Virtual 方法
Gio.IOStreamClass.close_async
请求异步关闭流,释放与之相关的资源。操作完成后,将调用 callback
。然后可以调用 g_io_stream_close_finish()
以获取操作的结果。
从 2.22 开始