stdin이 닫히면 실행을 멈추기 위해 순수한 C로 작성된 프로그램이 필요합니다.stdin이 (가) 차단되지 않고 열려 있는지 확인하는 방법?
프로그램 주주기에서 수행되는 무기한 작업이 있으며 블로킹 검사 (예 : getc()
)를 사용할 수있는 방법이 없습니다 (데이터가 표준 입력에 도달하지 않아도 알 수없는 시간 동안 열렸습니다).
inetd, xinetd 또는 그 유사품에서 호스팅되는 네트워크 데몬을 구현하는 데 위에서 설명한 기능을 사용하려고합니다. 연결이 열린 상태에서 정상적으로 데이터를 내보내고 닫을 때 올바르게 작업해야합니다. 이제 연결 종료 후 프로그램이 중지되지 않으므로 내 프로그램이 호스팅 서비스에 의해 종료됩니다.
fctntl()
O_NONBLOCK
플래그를 stdin 설명자에 적용하면 논 블로킹 모드에서 read()
기능을 사용할 수 있습니까? 어떻게 든 select()
을 사용해야합니까?
P. 데이터는 가정되지 않지만 표준에 도달 할 수 있습니다. 비 차단 판독 방법은 질문에 대한 대답 일 수 있습니다.
'poll' 역시 정확히 OP가 원하는 것이며, 그 인터페이스는 작고 고정 된 파일 디스크립터 집합을 다룰 때'select'보다 약간 더 쉽습니다. – ephemient