当前位置: 首页 > 面试题库 >

Java FileLock是POSIX咨询(fcntl)锁吗?

尉迟华翰
2023-03-14
问题内容

我有一个使用POSIX咨询锁来锁定文件的C 程序。也就是说,它使用POSIX
fcntl系统调用
进行锁定操作。我希望Java程序能够与该C

程序互操作,因此我希望Java程序也使用POSIX咨询锁。Java中的文件锁定应使用标准FileLock类。但是可以理解,API文档在如何实现锁定方面含糊不清:

该文件锁定API旨在直接映射到基础操作系统的本机锁定工具。因此,对文件具有访问权限的所有程序都应该可以看到文件上持有的锁,而不管这些程序所使用的语言是什么。

如果我在POSIX操作系统(或更具体地说是GNU / Linux系统)上运行Java的通用实现(Oracle,Open JDK),是否可以安全地假定Java
FileLock类使用POSIX咨询锁?


问题答案:

包括Linux在内的某些Unix操作系统提供BSD样式(flock)锁,因此可能认为Java
FileLock可以使用BSD样式的锁而不是POSIX锁来实现。但这是不可能的,因为BSD风格的锁是
整个文件 锁而不是 记录 锁,并且
FileLock是记录锁:每个锁都针对文件中的一定范围的字节。因此,在Unix系统上没有真正的选择,并且假设FileLock使用POSIX
fcntl锁的实现是在Unix操作系统上的安全假设。

生成的FileLock锁可能会或可能不会与BSD样式的锁交互。可以使用POSIX锁来实现BSD样式的锁(对于2.0之前的Linux就是这种情况),或者操作系统可能具有两种锁定交互方式(对于FreeBSD就是这种情况)。但是总的来说,这是无法保证的,并且BSD风格的锁和Java锁可能实际上对彼此是不可见的(对于任何您可能会遇到的Linux版本,都是这种情况)。



 类似资料:
  • 函数原型 #include <unistd.h> #include <fcntl.h> int fcntl(int fd, int cmd, ... /* arg */ ); 参数 参数可能有两个,也可能有三个,具体看第二个参数的取值。 fd: 文件描述符 cmd: 命令 arg: 命令的参数 常用cmd arg 描述 F_DUPFD 复制文件描述符 F_GETFD 无 获取文件描述符标签 F_S

  • 商品咨询: 一、买家购买商品时对商品的咨询。 商品咨询的具体操作: 第一步:点开某个商品找到我要咨询点击。 第二步:选择咨询类型。 第三步:添加咨询内容。 第四步:输入验证码后点击我要咨询。 二、商品咨询在后台的具体操作: 1、未回复咨询:指卖家对咨询客户没有做出回复,不会出现回复内容。 2、已回复咨询:指卖家对咨询客户已经做出回复,会出现回复内容。 3、高级搜索:可以对咨询客户所咨询的商品名称、

  • 描述 (Description) 此函数是系统fcntl()函数的Perl版本。 使用FILEHANDLE上的SCALAR执行FUNCTION指定的功能。 SCALAR包含要由函数使用的值,或者是任何返回信息的位置。 语法 (Syntax) 以下是此函数的简单语法 - fcntl FILEHANDLE, FUNCTION, SCALAR 返回值 (Return Value) 此函数返回0,但如果

  • fcntl(文件描述词操作) 相关函数 open,flock 表头文件 #include<unistd.h> #include<fcntl.h> 定义函数 int fcntl(int fd , int cmd); int fcntl(int fd,int cmd,long arg); int fcntl(int fd,int cmd,struct flock * lock); 函数说明 fcntl

  • fcntl 文件描述词操作 相关函数 open,flock 表头文件 #include<unistd.h> #include<fcntl.h> 定义函数 int fcntl(int fd, int cmd); int fcntl(int fd, int cmd, long arg); int fcntl(int fd, int cmd, struct flock *lock); 函数说明 fc

  • 通常用于App中展示当前用户的历史咨询列表,比如消息盒子的展示: 一、咨询列表说明: 1、获取所有咨询入口的最后一条消息的总和,以接待组settingid为维度; 2、能区分该条消息的状态(已读、未读以及未读数); 3、返回的数据是按照最后一条消息的时间对咨询列表倒序排序。 二、API接口 方法一:+ (NSArray *)ntalker_getConsultHistoryListCount:(N