close() 블록을 할 수 있나요?

close() 블록을 할 수 있나요?

예를 들어, 파이프나 소켓을 닫고 파이프나 소켓의 쓰기 버퍼에 아직 상대편 프로세스에서 읽지 않은 데이터가 있는 경우 해당 데이터를 읽거나 다른 프로세스가 종료될 때까지 close() 블록을 수행합니다. ?

답변1

close차단 가능해:

O_NONBLOCK이 설정되지 않고 STREAM에 대한 신호가 게시되지 않고 모듈의 쓰기 대기열에 데이터가 있는 경우 close()는 모든 출력 스트림이 해제되기 전에 (각 모듈 및 드라이버에 대해) 지정되지 않은 시간 동안 대기해야 합니다. .

그리고:

fildes가 소켓을 참조하는 경우 close()는 소켓을 파괴합니다. 소켓이 연결 모드에 있고 대기 시간이 0이 아닌 소켓에 대해 SO_LINGER 옵션이 설정되어 있고 소켓에 전송되지 않은 데이터가 있는 경우 close()는 현재 대기 시간 간격 동안 모든 데이터가 전송될 때까지 차단됩니다.

관련 정보