select()
является вызовом ОС, специфичным для Unix, и, следовательно, не является частью стандартной библиотеки Ada.
Вам нужно будет найти (нестандартный) пакет, обеспечивающий интерфейс системных вызовов Unix, обернуть его самостоятельно, используя сопутствующие прагмы, или выбрать другой подход.
По первому варианту я могу помочь только немного, так как у меня нет под рукой системы Unix. Пакет Posix должен иметь его, и я считаю, что вы можете найти один такой пакет (Florist) для Gnat здесь . Я не могу говорить о его качестве.
Чтобы сделать свои собственные привязки, вы хотели бы проверить средства, предусмотренные для этого в Приложении B к LRM . Это довольно сложная тема, и ее не следует пытаться использовать, если вы не знаете много о том, как ваша ОС выполняет свои подпрограммные связи, или не готовы к изучению.
Для «другого подхода», посмотрите, какое справочное руководство вы используете, чтобы рассказать о задачах и / или защищенных объектах Ады (не путать с ключевым словом protected
в C ++). Например, вы можете предпочесть одну задачу, единственной задачей которой является чтение входящих данных с последовательного порта. Вы можете синхронизировать его между чтениями с помощью рандеву или по-настоящему сексуально с очередью, реализованной с помощью защищенного объекта.