vnop_lockctl 入口点
用途
设置,检查和查询记录锁定。
语法
参数
| 项 | 描述 |
|---|---|
| VP | 指向该文件的虚拟节点 (v 节点)。 |
| 偏移量 | 指示与打开的文件结构的文件偏移量。 此参数用于确定锁定区域的起始位置。 |
| 勒克达特 | 点至 埃洛克 结构。 此结构描述要执行的锁定操作。 |
| cmd | 标识要执行 vnop_lockctl 入口点的锁定操作的类型。 它是一个采用以下锁定控制值的位掩码:
|
| 重试_fn | 指向在重试锁定时被调用的子例程。 如果立即授予锁定,那么不使用此子例程。 注: 如果 retry_fn 参数不是空值,那么不管 SLPFLCK 标志如何, vnop_lockctl 入口点都将不会休眠。
|
| 重试标识 | 指向可以用于存储值的位置。 此值可用于将重试操作与特定锁定或一组锁定关联起来。 仅将重试值与 retry_fn 参数一起使用。 注: 此值是不透明值,调用者不应将其用于除锁定关联以外的任何其他用途。 (不应该将此值用作指针。)
|
| 茨尔普 | 点至 克雷德 结构。 此结构包含文件系统可用来验证访问许可权的数据。 |
描述
vnop_lockctl 入口点用于请求锁定记录。 此入口点使用 埃夫洛克 结构中的信息来实现记录锁定。
如果请求的锁定被现有锁定阻止,那么 vnop_lockctl 入口点应使用存储在该入口点中的重试子例程地址 (由 retry_fn 参数指定) 来建立休眠锁定。 然后, vnop_lockctl 入口点返回关联标识值给调用者 (在 重试标识 参数中) ,并返回出口值 EAGAIN。 稍后唤醒休眠锁定时,将以 重试标识 参数作为其参数来调用 retry 子例程。
Eflock 结构
eflock 结构在 /usr/include/sys/flock.h 文件中定义,并包含以下字段:
| 字段 | 描述 |
|---|---|
| l_type | 指定锁定类型。 此字段采用以下值:
|
| l_whence | 指定以下位置:l_start字段偏移量。 |
| l_start | 指定从以下位置的偏移量:l_whence。 |
| l_len | 指定记录长度。 如果此字段为 0 ,那么指定文件的剩余部分。 |
| l_vfs | 包含该文件的 指定虚拟文件系统 。 |
| l_sysid | 指定唯一地标识给定虚拟文件系统的主机的值。 在调用 vnop_lockctl 入口点之前,必须填充此字段。 |
| l_pid | 指定锁定所有者的进程标识 (PID)。 在调用 vnop_lockctl 入口点之前,必须填充此字段。 |
执行环境
vnop_lockctl 入口点只能从 流程环境 中调用。
返回值
| 项 | 描述 |
|---|---|
| 重大安全事件数量 | 指示成功。 |
从 /usr/include/sys/errno.h 文件返回非零返回值以指示失败。 有效值包括:
| 项 | 描述 |
|---|---|
| EAGAIN | 指示存在阻塞锁,并且调用者未使用 SLPFLCK 标志来请求操作休眠。 |
| ERRNO | 返回失败时 /usr/include/sys/errno.h 文件中的错误号。 |