파일 I/O에서 "차단"이란 무엇입니까?

파일 I/O에서 "차단"이란 무엇입니까?

내 교과서에서는 이에 대해 언급하지만 구체적으로 정의하지는 않습니다. 사용되는 맥락(이 경우 파이프)으로 볼 때 파이프의 한쪽 끝이조각, 일시적으로 "비활성화"되고(원하는 경우) 데이터가 대기열에 추가됩니까? 제가 좀 헷갈리는 부분이 바로 이 부분입니다. "차단"되면 (무엇이든) 차단이 해제될 때까지 기다린 다음 차단하는 동안 전송된 내용을 계속 진행합니까? 이것은 그들이 "비차단"일 때 즉시 오류를 반환한다고 말하기 때문에 그들이 암시하는 것 같습니다(제 기억이 정확하다면). 올바른 방향으로 설명하거나 추진해 주시면 감사하겠습니다. 감사해요!

(어떤 태그를 사용해야 할지 잘 모르겠습니다)

답변1

차단 호출은 데이터가 사용 가능하고 해당 데이터를 기다리는 경우 반환되고, 비차단 호출은 데이터를 반환합니다.만약에반환할 데이터가 있고, 그렇지 않으면 데이터가 없음을 나타내는 오류가 반환됩니다(그러나 항상 호출 후 "즉시" 반환됨).

이들 중 하나를 사용할지 여부는 수행하려는 작업에 따라 다릅니다. 해당 데이터를 얻고 싶지만 다른 할 일이 없는 경우 차단 호출을 호출하면 됩니다. 하지만 아직 데이터가 없으면 다른 작업을 수행하고 싶을 때가 있습니다.

"데이터가 있습니까?"를 의미하는 POSIX Swiss Knife 도 참조하세요. select()시간이 정해져 있는 여러 파일 설명자에 대한 호출을 차단하는 호출입니다(따라서 5분 동안 입력이 없으면 반환하고 오류를 반환하도록 할 수 있습니다).

답변2

I/O 작업이 차단되면 해당 작업을 시작한 함수/시스템 호출은 적절한 양의 데이터를 읽거나 쓸 때까지 프로세스/스레드에 제어를 반환하지 않습니다.

관련 정보