bestsource

Linux에서 select를 사용하는 이유

bestsource 2023. 7. 3. 23:01
반응형

Linux에서 select를 사용하는 이유

저는 연쇄 프로그램을 보고 있었는데, 그들이 사용하는 것을 보았습니다.select()사용하기 전에read()정확히 왜 이것이 필요한가요?왜 우리가 직접 전화할 수 없는 거지?read()실패 여부를 확인합니다.또한 파일 설명자 세트를 이미 전달하는 동안 파일 설명자를 1씩 증가시키고 전달해야 하는 이유는 무엇입니까?select()?

예:

r=select(fd+1, &fds, NULL, NULL, &timeout);여기서 fds는 이미 fd의 값을 가집니다.

시스템 호출은 관심 있는 파일 설명자에 읽을 데이터가 있는지 여부를 알려줍니다.파일 설명자에 대한 읽기 작업이 차단되는지 여부가 문제입니다.

실행하는 경우read()파일 설명자(예: 직렬 포트에 연결된 파일 등)에서 읽을 데이터가 없으면 읽을 데이터가 있을 때까지 통화가 중단됩니다.다음을 사용select()그렇게 막히고 싶지 않습니다.

또한 다음과 같은 질문을 합니다.

파일 설명자 세트를 이미 전달하는 동안 파일 설명자를 1씩 증가시키고 전달해야 하는 이유는 무엇입니까?select?

그것은 아마도 FD_SET의 크기를 지정하는 것일 것입니다.에 대한 첫 번째 주장select()는 로 알려져 있으며 POSIX는 다음과 같이 말합니다.

nfds인수는 테스트할 설명자의 범위를 지정합니다.첫번째nfds설명자는 각 세트에서 확인되어야 합니다. 즉, 0부터 0까지의 설명자입니다.nfds-1설명자 세트에서 검사해야 합니다.

파일 설명자를 테스트하려면n에 있어서의 가치.nfds적어도 다음 값이어야 합니다.n+1.

대화형 사용자1 입력을 읽는 동안 계속 실행하려는 프로그램은 멀티스레드이거나 입력 스트림을 특히 조건부로 주의 깊게 읽어야 합니다.

Select(2) 두 번째 설계 패턴을 구현하는 데 사용할 수 있습니다.전체 응용프로그램을 차단하지 않고 입력을 읽을 수 있는지 여부를 결정할 수 있습니다.


또는 예측할 수 없이 도착하는 다른 입력.

파일 설명자가 차단 없이 일부 IO를 준비할 때까지 지속적으로 모니터링해야 할 경우 Select call을 사용합니다.

일반적으로 IO(예: read() 비블로킹을 원할 때 사용되며 :man 페이지를 읽습니다.

관련 API도 읽어보세요.

언급URL : https://stackoverflow.com/questions/14544621/why-is-select-used-in-linux

반응형