read
1000바이트를 읽기 위해 호출했다고 가정 하고 read
501번째 바이트를 읽을 때 신호가 이를 중단하면 read
500을 반환합니까?
답변1
파일 유형(디스크, 소켓, 파이프, 터미널)과 신호 타이밍에 따라 최소한 세 가지 작업 중 하나를 수행할 수 있습니다.
(a) 데이터가 전송되기 전에 신호가 도착할 수 있으며, 이 경우 read()는 -1을 반환하고 errno를 EINTR로 설정합니다. 호출자는 명시적으로 read()를 반복해야 합니다.
(b) 신호는 전송이 완료될 때까지 연기된 다음 정상적으로 반환될 수 있으며, 아마도 신호 처리기가 호출된 후에 가능합니다.
(c) 읽기는 오류가 아닌 짧은 카운트를 반환할 수 있습니다. 이는 파일 끝이나 현재 더 이상 사용할 수 없는 경우(예: 파이프나 소켓), 신호로 인해 전송이 중단되는 경우에도 발생할 수 있습니다. 호출자는 가변 길이 부분의 데이터를 처리하거나 원래 전송의 의도를 완료하기 위해 추가 read() 호출을 수행하여 짧은 입력을 처리해야 합니다.