Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
АСНИ.doc
Скачиваний:
78
Добавлен:
26.11.2019
Размер:
6.35 Mб
Скачать

История

Работа над проектом Cygwin была начата в 1995 г. Стивом Чемберленом, программистом Cygnus, заметившим, что Windows NT и Windows 95 используют в качестве формата объектных файлов форматCOFF. К тому времени в GNU уже была реализована поддержка архитектуры x86COFF, а также библиотека языка C newlib; таким образом, по крайней мере теоретически, не представляло затруднений получить из GCC кросс-компилятор, который бы создавал исполняемые файлы Windows. Это оказалось несложным и на практике. Вскоре появился прототип.

Следующим шагом было заставить компилятор работать в Windows, но для этого была необходима эмуляция многих функций Unix: к примеру, должен был работать скрипт GNU configure. Этот скрипт нуждается в оболочке типа bash, которая, в свою очередь, требует наличия стандартных потоков ввода-вывода и системного вызова fork. Windows располагает подобными функциональными возможностями, и библиотека Cygwin лишь транслирует вызовы, исходящие от программ, управляя определёнными видами данных, такими как файловые дескрипторы.

В 1996 г. к проекту Cygwin присоединились и другие программисты, так как стало очевидным, что Cygwin сделает возможным использование инструментов Cygnus на системах с Windows (до этого намечалось использовать DJGPP). Этот вариант был особенно привлекательным, ведь кросскомпиляция могла бы производиться в трёх направлениях: можно было использовать мощную станцию Sun для сборки Windows-кросскомпилятора MIPS, что позволяло значительно экономить время. С 1998 г. Cygnus предлагает пакет Cygwin в качестве самостоятельного продукта.

Интернационализация

До версии 1.7 Cygwin не имел поддержки Unicode и использовал только ANSI-варианты функций Win32; отсутствовала также и поддержка каких-либо кодировок, отличных от родных для Windows и OEM (так, в русскоязычной версии Windows Cygwin работала лишь с CP1251 и CP866, но не KOI8-RISO 8859-5,UTF-8 или какими-либо другими; тем не менее при работе в X Window System под Cygwin можно было использовать и другие кодировки, установив шрифты и настройки клавиатуры).

Начиная с версии 1.7 кодировкой по умолчанию является Unicode в форме UTF-8 и соответственно, по умолчанию используется локаль C.UTF-8. При вызове функций Win32 Cygwin осуществляет трансляцию строк в кодировку UTF-16, используемую в системах Windows. Начиная с версии 1.7.2 Cygwin также может извлекать некоторую информацию из реестра Windows в соответствии с установками Language и Territory в локали.

Другая проблема заключалась в том, что консоль Cygwin (подобно CMD.EXE) использовала OEM кодировку. Для обхода этого ограничения рекомендовалось запускать в Cygwin демоны rshd или sshd и использовать эмулятор терминала с полной поддержкой UTF-8, например PuTTY. Начиная с версии 1.7 консоль Cygwin также работает в кодировке UTF-8, что позволяет выводить текстовую информацию в UTF-8 напрямую. Также консоль осуществляет трансляцию вводимой с клавиатуры информации в UTF-8, в соответствии с используемой национальной раскладкой.

Работа с кириллицей

В современных версиях Cygwin работа с русскими символами не требует дополнительных настроек. Символы кириллицы работают в нейтральной локали LANG=C.UTF-8, в том числе имена файлов, имена пользователей и данные реестра. Можно установить русскоязычную локаль LANG=ru_RU.UTF-8, при этом включатся русскоязычные сообщения (у некоторых программ), даты по русски (LC_TIME) и другие категории локали.

В старых версиях, для того, чтобы видеть и вводить русские символы при работе в cygwin, необходимо установить переменную среды окружения LANG=ru_RU.CP1251 и создать файл ~/.inputrc или/etc/inputrc, который использует библиотека GNU readline следующего содержания:

set input-meta on

set meta-flag on

set convert-meta off

set output-meta on

Кроме этого желательно определить (например в файле ~/.bashrc) алиас

alias ls='ls --show-control-chars'