fcntlロックに関連する重複ファイル記述子はありますか?

fcntlロックに関連する重複ファイル記述子はありますか?

マニュアルページによると、dup2このシステムコールは古いファイル記述子の新しいコピーを作成します。両方の記述子は共有されません(close-on-execフラグ)。

しかし、コピーしたいファイル記述子にfcntlロックが関連付けられている場合、新しいファイル記述子は新しいロックを取得しますか?

答え1

Posixロック(F_SETLKなど)はプロセスに関連付けられているため、a以降でもdup2()ファイルのロックは1つだけ保持されます。を使用してロックリストを一覧表示できます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

関連情報