结构
GLibIOChannel
描述 [源代码]
struct GIOChannel {
/* No available fields */
}
GIOChannel
数据类型旨在提供一种便携式的方法来使用文件描述符、管道和套接字,并将它们集成到主事件循环中(请参阅 GMainContext
)。目前,在 UNIX 平台上提供完整的支持;而对 Windows 的支持只部分完成。
要在 UNIX 系统上创建一个新的 GIOChannel
,请使用 g_io_channel_unix_new()
。它适用于普通文件描述符、管道和套接字。或者,可以使用 g_io_channel_new_file()
以系统无关的方式为文件创建通道。
一旦创建了 GIOChannel
,就可以使用 g_io_channel_read_chars()
、g_io_channel_write_chars()
、g_io_channel_seek_position()
和 g_io_channel_shutdown()
函数以通用方式使用它。
要将 GIOChannel
添加到主事件循环,请使用 g_io_add_watch()
或 g_io_add_watch_full()
。在此处,指定在 GIOChannel
上感兴趣的事件,并提供在这些事件发生时要调用的函数。
GIOChannel
实例的初始引用计数为 1。可以分别使用 g_io_channel_ref()
和 g_io_channel_unref()
来递增或递减引用计数。当引用计数降至 0 时,GIOChannel
将被释放。(但不会自动关闭,除非它使用 g_io_channel_new_file()
创建。)使用 g_io_add_watch()
或 g_io_add_watch_full()
会增加通道的引用计数。
新函数 g_io_channel_read_chars()
、g_io_channel_read_line()
、g_io_channel_read_line_string()
、g_io_channel_read_to_end()
、g_io_channel_write_chars()
、g_io_channel_seek_position()
和 g_io_channel_flush()
不应与已弃用的函数 g_io_channel_read()
、g_io_channel_write()
和 g_io_channel_seek()
,使用相同的频道混合使用。
构造函数
g_io_channel_new_file
使用模式 mode
将文件 filename
作为 GIOChannel
打开。当对该频道的最后一个引用被解除时,此频道将被关闭,因此不需要调用 g_io_channel_close()
(尽管执行此操作不会导致问题,只要在关闭频道后不尝试访问该频道即可)。
实例方法
g_io_channel_close
关闭 IO 频道。任何待写入的挂起数据都将被刷新,忽略错误。在使用 g_io_channel_unref() 解除最后一个引用之前,此频道将不会被释放。
已弃用:2.2
g_io_channel_get_buffer_condition
此函数返回一个 GIOCondition
,具体取决于 GIOChannel
内部的内部缓冲区中是否存在要读取的数据/要写入数据的空间。只能设置标志 G_IO_IN
和 G_IO_OUT
。
g_io_channel_get_close_on_unref
返回与 channel
关联的文件/插槽/其他内容是否将在 channel
收到其最终未引用且被销毁时关闭。由 g_io_channel_new_file() 创建的频道的默认值为 TRUE
,所有其他频道的默认值为 FALSE
。
g_io_channel_read_line
从 GIOChannel
读一行(包括终止字符)到新分配的字符串中。如果返回为 G_IO_STATUS_NORMAL
,str_return
将包含已分配的内存。
g_io_channel_set_close_on_unref
在 GIOChannel
数据结构的最终未引用状态下是否关闭通道。由 g_io_channel_new_file() 创建的通道的默认值为 TRUE
,而所有其他通道的默认值为 FALSE
。
g_io_channel_shutdown
关闭 IO 通道。如果 flush
为 TRUE
,将会刷新任何待写数据。必须到最后一个引用使用 g_io_channel_unref() 移除后该通道才会被释放。