Java FileLock是一个POSIX顾问(fcntl)锁
作者:互联网
我有一个使用POSIX顾问锁来锁定文件的C程序.也就是说,它使用POSIX fcntl
system call进行锁定操作.我想要一个Java程序与该C程序进行互操作,所以我希望我的Java程序也使用POSIX顾问锁. Java should中的文件锁定使用标准FileLock
类.但是关于如何实现锁定,API文档可以理解为模糊:
This file-locking API is intended to map directly to the native locking facility of the underlying operating system. Thus the locks held on a file should be visible to all programs that have access to the file, regardless of the language in which those programs are written.
如果我在POSIX操作系统上运行Java(Oracles,Open JDK)的通用实现,或者更具体地说是GNU / Linux系统,可以安全地假设Java FileLock类使用POSIX咨询锁吗?
解决方法:
一些Unix操作系统,包括Linux,提供了BSD-style (flock
) locks,因此可能认为Java FileLock可以使用BSD样式的锁而不是POSIX locks来实现.但这是不可能的,因为BSD样式的锁是全文件锁而不是记录锁,FileLock是一个记录锁:每个锁都用于文件中的一系列字节.因此在Unix系统上没有真正的选择,并且假设FileLock的实现使用POSIX fcntl锁是Unix操作系统上的安全假设.
生成的FileLock锁可能会也可能不会与BSD样式的锁交互.可以使用POSIX锁(this was the case for Linux before version 2.0)实现BSD样式的锁,或者操作系统可以具有两种类型的锁定交互(this is the case for FreeBSD).但总的来说,无法保证,BSD风格的锁和Java锁可能彼此有效地不可见(this is the case for any version of Linux you are likely to encounter).
标签:file-locking,java,linux,posix,fcntl 来源: https://codeday.me/bug/20190722/1506879.html