Flock(1)이 프로세스 간 잠금을 수행할 수 있는 이유는 무엇입니까?

Flock(1)이 프로세스 간 잠금을 수행할 수 있는 이유는 무엇입니까?

Flock은 열린 파일 설명과 연관되어 있으며 open(2)는 새로운 열린 파일 설명을 생성합니다. 따라서 두 개의 별도 셸에서 Cluster(1)을 호출하면 각각 잠금 파일이 열리고 두 개의 열린 파일 설명이 생성됩니다. 클러스터(1)는 열려 있는 각 파일 설명과 관련된 잠금 상태를 어떻게 알 수 있습니까? 혼란스럽습니다... 또한, Flock(1)은 경로명과 파일 설명자를 다르게 처리합니까?

고쳐 쓰다:

내가 말하는 무리는 Linux 하의 무리입니다.

제가 이해한 바로는 클러스터를 나타내는 구조는 시스템 전체에서 고유합니다. 하나 이상의 열린 파일 설명은 무리 구조(예: 열린 파일 설명과 i-노드 간의 관계)를 참조할 수 있습니다. 내 것이 되어라'추측하다'옳은?

답변1

아니요 , 파일 설명자가 아니라 파일을 잠그는 flock시스템 호출을 둘러싼 래퍼입니다 .flock()

OpenBSD 매뉴얼flock()(내가 강조한 것)은 다음과 같습니다.

flock()권고 잠금 적용 또는 제거파일에파일 설명자와 연결됩니다 fd.

[...]

잠금은 파일 설명자가 아닌 파일에 있습니다. 즉, 파일 설명자 복제 dup(2)fork(2)인해 여러 잠금 인스턴스가 발생하지 않고 단일 잠금에 대한 여러 참조가 발생합니다. 파일 잠금을 보유하고 있는 프로세스가 포크되고 하위 프로세스가 명시적으로 파일 잠금을 해제하면 상위 프로세스는 잠금을 잃게 됩니다.

flock()커널이 잠금을 추적하는 시스템 호출입니다.

관련 정보