6

libeio 移植到 Windows 需要什么?

4

2 回答 2

7

差不多一年后,您可能想要查看的内容(您或其他任何人通过搜索或 Google 找到此内容)是libuv,以前称为 liboio。与公认的答案相反,Windows 并不是或者当时没有事件 i/o 的概念,它只是在知识渊博的 Windows API 的神秘圈子之外并不为人所知开发商。在 Windows 空间中,类似的概念被实现为I/O Completion Ports,因此 libeio 版本/port/fork/analog 不需要重新实现轮子,它只需要具有 libeio 外观API 到在后台使用 IOCP 的东西。

于 2011-05-16T03:27:33.130 回答
1

Libeio 正在使用 Windows 世界未知的 unix API 和 unix 概念。您拥有的解决方案是:

  • 在 windows 上使用 unix 抽象层:如cygwin适用于 Unix 的 Windows 服务。但是即使有了这些层,运行 libeio 代码也会遇到困难,因为有很多这样的系统相关代码:
# 如果 __FreeBSD__ || 定义 __NetBSD__ || 定义 __OpenBSD__
# 定义 _DIRENT_HAVE_D_TYPE /* 叹息 */
# 定义 D_INO(de) (de)->d_fileno
# 定义 D_NAMLEN(de) (de)->d_namlen
# elif __linux || 定义 d_ino || _XOPEN_SOURCE >= 600
# 定义 D_INO(de) (de)->d_ino
# 万一
  • 使用GTK+(实际上是glib )、 wxWidgetsQt等可移植抽象库重写 libeio 。这些框架已经为低级例程、通信服务、I/O 通道和异步队列实现了强大的 API。这些框架的开发人员为实现代码的可移植性付出了很多努力。您不必重新发明轮子。

当然,第二种方案是最好的方案,考虑到 eio.c 相对较小,这是 libeio 唯一的 C 文件。

于 2010-08-26T12:24:24.593 回答