2010-08-16 21 views

回答

7

大約一年後,您可能想要查看的內容(您或任何其他人通過搜索或Google發現此內容)是libuv,以前稱爲liboio。與已被接受的答案相反,Windows並沒有像當時或者當時那樣忽略了偶數I/O的概念,它只是在深奧知識的Windows API的奧祕之外並不是衆所周知的開發人員。在Windows空間中,類似的概念實現爲I/O Completion Ports,所以它不像libeio版本/端口/ fork /模擬需要重新實現輪子,它只需要一個自由外觀的API來實現某些功能正在使用IOCP。

1

Libeio正在使用Windows世界中未知的unix API和unix概念。你的解決方案是:

  • 使用Windows上的UNIX抽象層:像cygwinWindows Services for Unix。但即使有這些層,你必須運行libeio代碼困難,因爲有很多的系統相關的代碼是這樣的:
 
# if __FreeBSD__ || defined __NetBSD__ || defined __OpenBSD__ 
# define _DIRENT_HAVE_D_TYPE /* sigh */ 
# define D_INO(de) (de)->d_fileno 
# define D_NAMLEN(de) (de)->d_namlen 
# elif __linux || defined d_ino || _XOPEN_SOURCE >= 600 
# define D_INO(de) (de)->d_ino 
# endif 
  • 重寫libeio用便攜式抽象庫像GTK+glib在事實),wxWidgetsQt。 Thoses框架已經爲低級例程,通信服務,I/O通道和異步隊列實現了強大的API。這些框架的開發人員已經付出了很多努力來允許其代碼的可移植性。你不必重新發明輪子。

當然,第二個解決方案是最好的,考慮到eio.c的相對較小的尺寸,libeio的唯一C文件。