Особенности программирования для Linux

Операционные системы Windows и Linux имеют достаточно серьезных различий, чтобы сделать кроссплатформенную разработку делом сложным и кропотливым. В первую очередь необходимо хорошо знать обе операционные системы и иметь опыт работы с ними.

Очевидно, что создание исходного кода для кроссплатформенных приложений — это трудоемкий процесс, который усложняется по мере использования специфических возможностей операционных систем. Простейшим путем в данном случае будет применение только стандартных свойств и методов компонентов CLX. Но, к сожалению, такой путь возможен для сравнительно несложных приложений.

К примеру, большинство приложений имеют функции для работы с файлами. Файловые системы Windows и Linux отличаются настолько, что кроссплатформенная реализация любых мало-мальски сложных операций с файлами требует серьезного внимания и усилий.

Linux чувствительна к регистру символов в именах файлов и путях, поэтому не стоит использовать в исходном коде имена файлов напрямую, а при необходимости делать это нужно аккуратно. Во многих компонентах для решения проблемы заглавных и строчных букв можно использовать свойство

property CaseSensitive: Boolean;

После присвоения свойству значения True компонент производит все строковые операции с учетом регистра символов.

Для формирования полного пути файла используйте константы из модуля SysUtils. Это PathDelim (символ разделителя каталогов в пути файла), DriveDelim (символ логического диска), pathsep (символ разделителя между несколькими путями файлов в одной строке).

При работе с текстовыми файлами необходимо помнить о различии управляющих символов в Windows и Linux. Для обозначения конца строки в Windows используются символы CR/LF, а в Linux — только символ LF. В Windows окончание текста определяется символом Ctrl-Z, а в Linux — просто концом файла.

Так как в Linux отсутствует системный реестр, то для сохранения настроек приложения используйте класс TMeminiFile, обеспечивающий сохранение переменных среды в INI-файле.

При создании кроссплатформенных приложений желательно использовать только свойства и методы классов CLX. В библиотеке CLX также доступны для применения такие важные для написания бизнес- логики приложения классы, как TList, TStringList, TCollection, TAction и др.

Если это ограничение является слишком жестким, и в программе требуется использовать функции системных API, применяйте директивы условного перехода:

{$IFDEF MSWINDOWS}

{код для Windows}

 {$ENDIF}

{$IFDEF LINUX}

{код для Linux}

 {$ENDIF}

Для определения исходного кода Windows применяйте константу MSWINDOWS, и не используйте константу WIN32, т. к. все еще есть код WIN32 и никто не может поручиться, что вам не понадобится константа WIN64 для соответствующего кода.