2012-07-06 2 views
1

모든 파일 시스템에 nfs가 마운트 된 CFS에서 실행되는 모듈을 C++로 작성했습니다.NFS 공유 텍스트 파일에 대한 동시 쓰기 방지

NFS를 통해 모든 컴퓨터와 공유되는 구성 파일이 있습니다. 모두 해당 파일을 읽고 쓸 수 있습니다. 동시 액세스로 인한 데이터 손상이 없는지 어떻게 확인합니까?

NFS에 자체 잠금 프로토콜이 있다는 것을 알고 있지만 믿을만하지 않습니다. - concurrent nfs access. 나는 또한 iNotify가 nfs가 장착 된 드라이브 - inotifiy example에서 제대로 작동하지 않는다는 것을 알고있다. stat은 쓰기/읽기 전에 파일에 액세스하고 있는지 확인하는 데 유용 할 것입니다.

동시 액세스를 피하기 위해 C++에서 간단한 잠금 메커니즘을 어떻게 구현합니까?

+2

... 같은 파일에 동시에 쓰려고하지 않으므로. 파일의 고유 복사본에 쓰고 이름을 바꾸어 이전 파일로 피벗합니다. – Petesh

+0

... 다른 말로하면 파일이 로컬 일 경우 어쨌든 수행해야 할 작업과 정확히 동일합니다. – Celada

+0

이것은 파일 (fd 포함)이 IPC (유닉스 도메인 소켓)에 의해 변경된 것을 추적하고 있기 때문에 나에게 옵션이 아닙니다. 변경 사항은 추가 처리를 위해 모듈로 다시 전송됩니다. – sillysheep

답변

0

NFS를 통해 공유되는 파일에 내용 A, B 및 C를 동시에 기록하면 최종 내용은 ABC 또는 BAC, CAB 등과 같은 ABC의 가능한 조합이됩니다. 파일은 항상 일관성이 있으면 A를 부분적으로 쓰고 B를 뒤 따르지 않을 것이다. 콘텐츠 크기가 NFS 블록 크기 내에있는 경우에만 해당됩니다.

쓰기가 블록 크기를 초과하는 경우 NFS 서버와 클라이언트에서 모두 잠금 데몬을 실행해야하는 NLM을 사용해야합니다.

+0

질문 제목을 틀리게 작성하지 않았으며, 나쁘지 만 동시 '액세스'를 피하기를 원합니다. 씁니다. 동시 쓰기는 문제가되지 않지만 동시 읽기/쓰기가 가능합니다. 그 것을 피하는 잠금 장치가 내가 관심을 갖고있는 것입니다. – sillysheep