2010-08-16 6 views

Odpowiedz

7

Prawie rok później możesz zajrzeć (Ty lub ktokolwiek inny, kto znajdzie to za pomocą wyszukiwarki lub Google), pod numerem libuv, dawniej liboio. W przeciwieństwie do przyjętej odpowiedzi, nie chodzi o to, że Windows jest, lub w tym czasie, pozbawiony koncepcji zdarzenia i/o, to po prostu nie było dobrze znane poza tajemniczym kręgu głębokiego poznania Windows API programistów. W przestrzeni Windows podobna koncepcja jest zaimplementowana jako I/O Completion Ports, więc nie jest tak, że wersja libeio/port/fork/analog wymagałaby ponownego zaimplementowania pokrętła, po prostu musiałby mieć API o używał IOCP pod maską.

1

Libeio wykorzystuje uniksowe interfejsy API i koncepcje uniksowe, nieznane w świecie Windows. Rozwiązania masz to:

  • użycie UNIX warstwa abstrakcji na oknach: jak cygwin lub Windows Services for Unix. Ale nawet z tych warstw, będziesz miał trudności z systemem kodu libeio gdyż istnieje wiele kodu systemu zależne tak:
 
# 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 
  • przepisać libeio z przenośnym abstrakcji biblioteki jak GTK+ (glib w fakt), wxWidgets lub Qt. Platformy Thoses implementują już zaawansowane API dla procedur niskopoziomowych, usług komunikacyjnych, kanałów i/o oraz kolejek asynchronicznych. Twórcy tych frameworków poczynili duży wysiłek, aby umożliwić przenoszenie ich kodu. Nie musisz wymyślać koła na nowo.

Zdecydowanie drugie rozwiązanie jest najlepsze, biorąc pod uwagę stosunkowo mały rozmiar eio.c, jedynego pliku libeio.