select()
은 Unix 고유의 OS 호출이므로 Ada의 표준 라이브러리에 속하지 않습니다.
유닉스 시스템 호출 인터페이스를 제공하는 (비표준) 패키지를 찾고, 인터프리싱 프라그 마를 사용하여 직접 포장하거나, 다른 접근법을 취할 필요가 있습니다.
첫 번째 옵션으로는 유닉스 시스템을 사용하지 않아 조금만 도움이 될 수 있습니다. Posix 패키지 은이어야하며, package (Florist) for Gnat here과 같은 패키지를 찾을 수 있습니다. 나는 그 품질에 대해 말할 수 없다.
자신 만의 바인딩을 만들려면 Appendix B of the LRM에 제공된 기능을 확인하십시오. 이것은 고급 주제의 일종이지만 OS가 어떻게 서브 루틴 연계를하는지 또는 배울 준비가되어 있지 않다면 시도해서는 안됩니다.
"다른 접근법"을 사용하려면 Ada의 작업 및/또는 보호 된 개체 (C++의 protected
키워드와 혼동되어서는 안 됨)에 대해 사용중인 참조 가이드를 살펴보십시오. 예를 들어 직렬 포트에서 들어오는 데이터를 읽는 것이 하나의 작업 인 것을 선호 할 수 있습니다. 랑데뷰를 통해 읽기 사이에서 동기화하거나 보호 된 객체를 통해 구현 된 대기열을 사용하여 정말 섹시해질 수 있습니다.
답변은 대화식 인터페이스의 특성에 달려 있다고 생각합니다. TCP/IP 소켓의 경우 GNAT.Sockets는 필요한 것을 제공합니다 (컴파일러에 따라 다름). 직렬 포트의 특성을 알기 전까지는 신호 처리 된 파일 설명자가 무엇이 필요한지 말할 수 없습니다. –
나는 모뎀 명령을 보내고 해당 filedescriptor에 대한 응답을 기다리고있다. 하지만 T.E.D. 아래에서 언급하십시오. 아마도 이것을 포기하고 과제를 조사하는 것이 좋습니다. 나는 그것을 "에이다"방식으로하고 싶지만 어디를보아야하는지 전혀 몰랐다. – zeroc8