fcntl 잠금과 관련된 중복된 파일 설명자가 있습니까?

fcntl 잠금과 관련된 중복된 파일 설명자가 있습니까?

매뉴얼 페이지에 따르면 dup2이 시스템 호출은 이전 파일 설명자의 새 복사본을 생성합니다. 두 설명자는 공유되지 않습니다(close-on-exec 플래그).

그러나 복사하려는 파일 설명자에 fcntl 잠금이 연결되어 있으면 새 파일 설명자가 새 잠금을 얻습니까?

답변1

Posix 잠금(F_SETLK 등)은 프로세스와 연결되어 있으므로 a 이후에도 dup2()파일에 대한 잠금은 하나만 유지됩니다. 를 사용하여 잠금 목록을 나열할 수 있습니다 lslocks. 2개의 fd 중 하나를 닫으면 잠금이 해제됩니다. 한 fd의 잠금을 변경하면 다른 fd도 변경됩니다. 그 후에는 fork()자녀의 잠금이 해제됩니다. 자세한 내용은 매뉴얼 페이지를 참조하십시오 fcntl. 이것Posix 사양dup2()이야기모든 잠금을 공유.

lockf()사용 편의성을 위해 에서 구현하는 간단한 테스트에 Python을 사용할 수 있습니다 fcntl(). 예를 들면 다음과 같습니다.

#!/usr/bin/python
import os, fcntl
pid = os.getpid()
fd = open("/tmp/try","rw")
fcntl.lockf(fd,fcntl.LOCK_SH,10)
fd2 = os.dup(fd.fileno())
os.system("lslocks -p %d" % pid) # one lock
fd.close()
os.system("lslocks -p %d" % pid) # no output

관련 정보