Linux의 O_APPEND 모드에서 파일의 원자적 쓰기 및 보고

Linux의 O_APPEND 모드에서 파일의 원자적 쓰기 및 보고

저는 많은 프로세스와 해당 프로세스 내에 많은 스레드가 있는 애플리케이션의 상태를 유지하려는 상황에서 작업하고 있습니다. 일반적으로 충돌이 없는지 확인하려면 잠금을 많이 사용해야 합니다.

O_APPEND 모드를 사용하여 데이터를 파일에 저장하면 이 문제를 피할 수 있기를 바랍니다. 이렇게 하면 4KiB 미만의 데이터가 파일에 기록되는 한 원자적 데이터가 됩니다. 추가 전용 데이터 구조를 사용하면 잠금이 없는 솔루션을 갖게 됩니다.

그러나 이것이 작동하려면 파일에 데이터가 기록된 후 파일의 데이터 위치를 알아야 합니다. 내가 겪고 있는 문제는 파일을 작성하고 작성 중인 파일 내의 오프셋을 알려주는 시스템 호출을 찾을 수 없다는 것입니다.

쓰기 및 찾기를 사용하여 이 위치를 검색할 수 있습니다. 그러나 다른 스레드가 동일한 파일 설명자를 공유하는 경우 이는 안전하지 않으므로 쓰기를 보호하기 위해 뮤텍스를 사용해야 하므로 잠금을 방지하려는 노력이 무산됩니다.

write, writev, pwrite 및 prwritev에 대한 매뉴얼 페이지를 검사하면 쓰기 작업을 수행한 다음 쓰기 후 단일 시스템 호출에 대한 오프셋으로 무언가를 알려주는 내용이 표시되지 않습니다. 아마 그렇지 않을 수도 있습니다. 내가 너무 많이 읽고 있는 걸까?

관련 정보