モジュールのドキュメントの最上部近くにある大きなピンク色のボックスからわかるように:
バージョン 1.5 で非推奨: このモジュールが提供するロック操作は、fcntl.lockf() 呼び出しによってより適切に実行され、より移植性が高くなります。
つまり、1997 年に廃止されたということです。その時点では、Mac OS X はアイデアとして存在すらしておらず、最初のバージョンは 2001 年にリリースされました。
したがって、誰もこのモジュールの OS X 固有の実装を作成したことがないことは驚くべきことではありません。驚くべきことは、3.0 まで完全に削除されなかったことです。
うまくいかない理由を正確に知りたい場合は、ソースを参照してください。詳細を調べなくても、*BSD、AIX、およびその他の特定されていないもの (AT&T SysV および 100% 互換性?) のコードがあることがすぐにわかります。「darwin」は *BSD プラットフォームのリストにないため、「something else」に分類されることに注意してください。の OS X マンページを見ると、ご想像のとおりfcntl
、struct flock
「何か別の」レイアウトではなく、明らかに BSD レイアウトです。
したがって、type(h)-whence(h)-start(l)-len(l)-sysid(h)-pid(h) の構造体を、start(q)-len( を期待する API に渡しています。 q)-pid(l)-type(h)-whence(h)。segfault の代わりに I/O エラーが発生したのは幸運です。
実際、BSD 名のリストに「darwin」を追加したとしても、start と len の上位 32 ビットを破棄し、パッド ゼロで置き換えるため、そのコードは正しくありません。(これは、最近の FreeBSD やその他の *BSD プラットフォームでもおそらく間違っています。)