有谁可以解释“g_io_create_watch”定义在哪里?

时间:2013-04-26 15:58:25

标签: c glib

我正在分析GIOchannel,glib源代码。有人可以解释一下

GSource * g_io_create_watch (GIOChannel   *channel,GIOCondition  condition){

  g_return_val_if_fail (channel != NULL, NULL);
  return channel->funcs->io_create_watch (channel, condition); //THIS LINE

}

上面的“这条线”是什么意思? 我试图找出它指向的功能,但不明白。 该函数存在于glib源代码的文件giochannel.c中。

提前致谢。

2 个答案:

答案 0 :(得分:2)

库GIO使用面向对象的技术,但用简单的C语言编写。

现在,重点:

  • channel:是指向GIOChannel对象的指针。这很容易。
  • channel->funcs:是指向此GIOChannel对象的虚拟表的指针。也就是说,指向函数的指针结构。这个想法是可能有几个GIOChannel的实现,每个实现都有一个不同的函数表来实现特定的类。
  • channel->funcs->io_create_watch:是g_io_create_watch对象的GIOChannel函数的实现。
  • return channel->funcs->io_create_watch (channel, condition):此表达式调用相关的给定虚函数并返回返回的值。

正如您所看到的,公共函数g_io_create_watch只是将调用转发给相应的虚函数。这是必要的,因为在GObject中虚拟函数永远不会被认为是公共的,也就是说,客户端代码永远不应该直接调用它们。

要了解它如何工作,看看到的一些的这些功能的特定实现中,例如,对于普通Unix文件,查看giounix.c文件,特别是功能g_io_channel_unix_new,并且struct unix_channel_funcs

答案 1 :(得分:0)

它看起来像是返回一个指向GSource类型的指针,它看起来是一个函数指针。