2014-09-03 4 views
3

나는 과거에 flock()과 fcntl()을 사용 했었지만 이전 버전의 Linux에서는 동작이 정의되지 않았거나 문제가 있다는 점을 항상 염려 해 왔습니다.Linux에서 NFS 파일을 잠글 때 문제가 있거나 정의되지 않은 동작을 피하는 방법은 무엇입니까?

이전 Linux-es (예 : 2.6.18 이상) 및 NFS 3+와 호환되는 솔루션이 필요합니다.

flock() 및/또는 fcntl()은 이러한 상황에서 일관되게 작동합니까? 아니면 원 자성을 보장하기 위해 open (.... O_EXCL)해야합니까?

답변

0

역사적으로, flock은 적어도 10 년 동안 사용 가능하며 2.0 이후로 커널에 의해 구현되었습니다. flock man page에서 :

커널 2.0 이후, 무리가()에서 시스템 호출로 구현되어 자신의 권리보다는 은 fcntl을 호출 한 GNU C 라이브러리 에뮬레이션 (2). 이는 진정한 BSD 의미를 산출합니다. flock()과 fcntl (2)에 의해 설정된 잠금 유형 사이에 상호 작용이 없으며 flock() 은 교착 상태를 감지하지 않습니다.

2.0 이전 커널을 다루지 않는 한 사용자의 요구 사항을 충족시킬 것으로 생각됩니다.

1

flock()을 NFS와 함께 사용할 수는 없습니다. fcntl()F_SETLK과 함께 사용하면 한 프로세스에서 여러 용도로 사용하는 경우주의가 필요합니다. http://0pointer.de/blog/projects/locking.html