![pwrite는 데이터 덮어쓰기를 어떻게 방지합니까?](https://linux55.com/image/221775/pwrite%EB%8A%94%20%EB%8D%B0%EC%9D%B4%ED%84%B0%20%EB%8D%AE%EC%96%B4%EC%93%B0%EA%B8%B0%EB%A5%BC%20%EC%96%B4%EB%96%BB%EA%B2%8C%20%EB%B0%A9%EC%A7%80%ED%95%A9%EB%8B%88%EA%B9%8C%3F.png)
두 개의 프로세스 A와 B가 있다고 가정합니다. 그들은 모두 동일한 파일에 추가하기를 원합니다. 둘 다 파일을 여는 데 함수를 사용 open
(사용하지 않음)하고 O_APPEND
, 둘 다 pwrite(fd, buf, bytes, offset)
파일을 쓰는 데 사용됩니다.
pwrite
파일 끝에서 오프셋 위치를 구문 분석해야 하므로 이 경우 데이터를 덮어쓰지 않는다는 것을 어떻게 보장할 수 있습니까 ?
답변1
이를 보장하지는 않습니다. 정말로 이야기의 끝입니다.
답변2
@Marcus Müller는 다음과 같이 썼습니다.
이를 보장하지는 않습니다. 정말로 이야기의 끝입니다.
이 pwrite
기능 자체는 귀하가 설명하는 시나리오에서 데이터 덮어쓰기에 대한 보호를 보장하지 않습니다.
데이터 덮어쓰기를 방지하려면 프로세스가 동시에 동일한 오프셋에 쓰지 않도록 파일 잠금, 프로세스 간 통신 또는 공유 데이터 구조를 통한 조정과 같은 다른 메커니즘을 구현해야 합니다.