将libeio 移植到 Windows 需要什么?
问问题
1059 次
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 )、 wxWidgets或Qt等可移植抽象库重写 libeio 。这些框架已经为低级例程、通信服务、I/O 通道和异步队列实现了强大的 API。这些框架的开发人员为实现代码的可移植性付出了很多努力。您不必重新发明轮子。
当然,第二种方案是最好的方案,考虑到 eio.c 相对较小,这是 libeio 唯一的 C 文件。
于 2010-08-26T12:24:24.593 回答