Ada IO Multiplexing в Linux - PullRequest
       9

Ada IO Multiplexing в Linux

1 голос
/ 09 августа 2011

Я пытаюсь выучить Ada в Linux, портируя простые инструменты C ++ на Ada.

Сейчас я пытаюсь написать простую программу последовательной связи, которая отправляет модемные команды и ожидает сигнальный файловый дескриптор, используя вызов select.

Кажется, я не могу найти пакет, содержащий вызов select - мне нужно искать какой-то пакет для конкретной платформы здесь? Где бы я найти это? Я даже здесь ищу нужную вещь?

1 Ответ

1 голос
/ 09 августа 2011

select() является вызовом ОС, специфичным для Unix, и, следовательно, не является частью стандартной библиотеки Ada.

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

По первому варианту я могу помочь только немного, так как у меня нет под рукой системы Unix. Пакет Posix должен иметь его, и я считаю, что вы можете найти один такой пакет (Florist) для Gnat здесь . Я не могу говорить о его качестве.

Чтобы сделать свои собственные привязки, вы хотели бы проверить средства, предусмотренные для этого в Приложении B к LRM . Это довольно сложная тема, и ее не следует пытаться использовать, если вы не знаете много о том, как ваша ОС выполняет свои подпрограммные связи, или не готовы к изучению.

Для «другого подхода», посмотрите, какое справочное руководство вы используете, чтобы рассказать о задачах и / или защищенных объектах Ады (не путать с ключевым словом protected в C ++). Например, вы можете предпочесть одну задачу, единственной задачей которой является чтение входящих данных с последовательного порта. Вы можете синхронизировать его между чтениями с помощью рандеву или по-настоящему сексуально с очередью, реализованной с помощью защищенного объекта.

...