dup2는 쓰기/읽기와 관련하여 원자적입니다.

dup2는 쓰기/읽기와 관련하여 원자적입니다.

O_APPEND쓰기 플래그 가 있는 읽기/쓰기용 파일 설명자 4가 있다고 가정해 보겠습니다 . 이 파일에 쓰는 스레드가 여러 개 있고 fd 4가 가리키는 파일을 주기적으로 전환하고 싶다면 dup2 호출을 수행하여 fd 4를 새 파일로 바꾸려고 합니다. 동시에 여러 스레드는 쓰기를 위해 여전히 fd 4를 가리킵니다. 데이터가 손실됩니까? 아니면 전환하는 동안 쓰고 있는 스레드에 오류가 발생합니까?

답변1

Linux 매뉴얼 페이지와 POSIX 설명은 이것이 실제로 원자적이라는 것을 상당히 명확하게 보여줍니다.

Linux 매뉴얼 페이지에서dup2():

파일 설명자를 닫고 재사용하는 단계는 newfd원자적으로 수행됩니다.

POSIX, "기본" 아래:

반면에,dup2()다른 인터페이스가 기존 파일 설명자를 자동으로 대체할 수 없기 때문에 함수는 고유한 서비스를 제공합니다.

파일 설명자를 열고 닫고 복사하는 측면에서는 원자적이어야 하지만 읽기나 쓰기 측면에서는 그렇지 않은 이유가 없습니다.

관련 정보