Поделиться через


Перенос приложений из UNIX в Win32

Предусматривается несколько вариантов переноса приложений из UNIX в Windows:

  • Перенос приложений из UNIX в Win32 с использованием библиотек UNIX

  • Перенос приложений из UNIX в Win32 с использованием машинного кода

  • Запуск приложений UNIX в ОС Windows с использованием подсистемы POSIX

Библиотеки UNIX

Обычно для компиляции кода UNIX в виде исполняемого файла Win32 используются UNIX-подобные библиотеки сторонних разработчиков. Для этих целей существует несколько коммерческих и как минимум одна открытая библиотека. Этот вариант используется не для всех приложений. Преимущество этого способа заключается в минимальных затратах усилий со стороны разработчика. Основным недостатком является неизбежное повышение производительности и функциональности перенесенного в Win32 приложения по сравнению с исходным. Использование дополнительных функций Win32 за пределами оболочки UNIX приложения может быть связано с определенными трудностями.

Ниже приведены ресурсы корпорации Майкрософт и сторонних разработчиков, которые можно использовать для переноса приложений UNIX в Visual C++:

Руководства по переносу приложений из UNIX

Руководство по переносу пользовательских приложений из UNIX, в котором представлены рекомендации по переносу приложений из UNIX в среду Win32.

https://go.microsoft.com/fwlink/?LinkId=95428

Руководство по переносу проектов из UNIX, которое дополняет предыдущее руководство и содержит высокоуровневую справку по переносу существующих проектов из UNIX в Win32. В этом руководстве представлены рекомендации по каждому этапу переноса проекта. Загрузить это руководство можно со следующего веб-узла:

https://go.microsoft.com/fwlink/?linkid=20012

Службы Microsoft Windows для UNIX (SFU)

Службы Microsoft Windows для UNIX (SFU) предоставляют полный спектр межплатформенных служб для интеграции приложений Windows в существующие среды UNIX. Службы для UNIX обеспечивают совместное использование файлов, удаленный доступ и администрирование, синхронизацию паролей, общие функции управления каталогами, а также включают стандартный набор служебных программ и оболочку.

Службы Windows для UNIX

Веб-узел InteropSystems.com

http://www.interopsystems.com/

Узел компании, предоставляющей программные решения для переноса приложений из UNIX в Win32.

Веб-узел C++ Boost

http://boost.sourceforge.net/regression-logs/

http://boost.sourceforge.net/boost-build2/

Непосредственный перенос приложений из UNIX в Win32

Также можно выполнить непосредственный перенос приложений из UNIX в Win32. Чтобы обеспечить в приложениях Win32 вызов многих стандартных системных функций, используемых в приложениях UNIX, можно использовать библиотеки ANSI C/C++ и коммерческие библиотеки компилятора C.

В этом случае не требуется изменять модель выходных данных для приложений, создаваемых на базе файла stdio, поскольку консольные интерфейсы API Win32 могут имитировать модель stdio, и существуют версии файла curses, в которых используются консольные интерфейсы API Win32. Дополнительные сведения см. в описании функции SetConsoleCursorPosition.

Приложения, создаваемые на базе сокетов Беркли, могут работать в Win32 после незначительных изменений. Интерфейс сокетов Windows обеспечивает возможность переноса с сокетов BSD при минимальных изменениях, которые выполняются во вводных разделах спецификации WinSock.

В Windows поддерживается DCE-совместимый протокол RPC, что позволяет использовать построенные на базе протокола RPC приложения. См. раздел Функции RPC.

Наибольшие расхождения между системами наблюдаются в модели процессов. В UNIX используется ветвление, которое не поддерживается в Win32. В зависимости от используемой модели ветвления и основания кода, в Win32 могут использоваться два интерфейса API: CreateProcess и CreateThread. Приложение UNIX, в котором выполняется ветвление с созданием нескольких копий самого приложения, можно изменить таким образом, чтобы оно выполнялось в Win32 в виде нескольких процессов или в виде одного процесса с несколькими потоками. Чтобы обеспечить взаимодействие между несколькими процессами (а при необходимости и обновить код и данные процесса подобно родительскому процессу, если требуется использовать возможности ветвления), можно использовать различные методы межпроцессного взаимодействия. Дополнительные сведения см. в разделе Межпроцессное взаимодействие.

Также существуют значительные различия между графическими системами Windows и UNIX. В UNIX используется графический интерфейс пользователя X Window, а в Windows — интерфейс GDI. Несмотря на концептуальную схожесть, простого сопоставления между интерфейсами API X и GDI не существует. Тем не менее, в библиотеке OpenGL поддерживается возможность переноса приложений, построенных с использованием библиотеки OpenGL UNIX. Также предусматриваются X-клиенты и X-серверы для Windows. Сведения об интерфейсе GDI см. в разделе Контексты устройств.

Базовые приложения UNIX, в том числе множество построенных на базе интерфейса CGI приложений, без проблем могут быть перенесены в среду Visual C++, работающую под управлением Windows. В библиотеке времени выполнения Visual C++ доступно множество функций, в том числе open, fopen, read и write. Также существуют однозначные сопоставления между интерфейсами API для C UNIX и Win32: openCreateFile, readReadFile, writeWriteFile, ioctlDeviceIOControl, closeCloseFile и т. д.

Подсистема Windows POSIX

Для переноса приложений из UNIX в Windows можно также использовать подсистему POSIX. Обратите внимание, что поддерживается только подсистема POSIX 1003.1 (единственная стандартизированная на момент разработки Windows NT версия POSIX). Дальнейшее расширение этой версии подсистемы практически не требуется, поскольку большинство приложений уже преобразовано в формат Win32. Версия 1003.1 практически не используется при работе с полнофункциональными приложениями, поскольку в ней отсутствуют многие функции, поддерживаемые в версии 1003.2, в том числе поддержка сети и т. д. В полнофункциональных приложениях, выполняемых в подсистеме POSIX для Windows, нельзя использовать функции Windows, доступные в приложениях Win32, в том числе файлы отображения памяти, функции сетевого взаимодействия и графические функции. В подсистеме POSIX для Windows выполняются в основном такие приложения, как VI, LS и GREP.

См. также

Ссылки

UNIX

Основные понятия

Правила вывода

Другие ресурсы

Перенос и обновление программ