fuchsia.io

添加次数:7

协议

AdvisoryLocking

fuchsia.io/locking.fidl 中定义

咨询锁定协议。

此协议旨在组合成 |File| 协议,以支持建议性锁定。

Advisory Lock 纯粹是建议。不会阻止通过此连接或其他连接对文件执行实际的读取或写入操作。

这些基元旨在支持 flock() 和 fcntl()(具体来讲,就是 F_SETLK、F_SETLKW 和 F_GETLK),在 Fuchsia 上运行的代码希望在其他操作系统中使用这些功能。

AdvisoryLock

获取底层文件上的建议锁。

锁定将持续到关闭此连接或使用 |AdvisoryLockType.UNLOCK| 调用此方法来显式释放锁定。

Advisory Lock 纯粹是建议。不会阻止通过此连接或其他连接对文件执行实际的读取或写入操作。

此方法需要以下权限:

错误

  • ZX_ERR_BAD_STATE无法获取指定的锁定类型。例如,另一个连接可能具有存在冲突的锁定类型。
  • ZX_ERR_NOT_SUPPORTED 此文件不支持建议性锁定。
  • ZX_ERR_ACCESS_DENIED 此连接没有足够的权限获取指定类型的锁定。

请求

名称类型
request AdvisoryLockRequest

响应

名称类型
payload AdvisoryLocking_AdvisoryLock_Result

目录

fuchsia.io/directory.fidl 中定义

AdvisoryLock

获取底层文件上的建议锁。

锁定将持续到关闭此连接或使用 |AdvisoryLockType.UNLOCK| 调用此方法来显式释放锁定。

Advisory Lock 纯粹是建议。不会阻止通过此连接或其他连接对文件执行实际的读取或写入操作。

此方法需要以下权限:

错误

  • ZX_ERR_BAD_STATE无法获取指定的锁定类型。例如,另一个连接可能具有存在冲突的锁定类型。
  • ZX_ERR_NOT_SUPPORTED 此文件不支持建议性锁定。
  • ZX_ERR_ACCESS_DENIED 此连接没有足够的权限获取指定类型的锁定。

请求

名称类型
request AdvisoryLockRequest

响应

名称类型
payload AdvisoryLocking_AdvisoryLock_Result

克隆

创建与同一远程对象的另一个连接。

flags 可以是以下任何一项:

  • OpenFlags.RIGHT_*
  • OpenFlags.APPEND
  • OpenFlags.DESCRIBE
  • OpenFlags.CLONE_SAME_RIGHTS

所有其他标志均会被忽略。

flags 中的 OpenFlags.RIGHT_* 位会请求对生成的克隆对象对应的权限。 克隆对象的权限必须大于或等于原始对象,否则会返回 ZX_ERR_ACCESS_DENIED。 或者,传递 OpenFlags.CLONE_SAME_RIGHTS 以继承针对来源连接的权限。 将任何 OpenFlags.RIGHT_* 标志与 OpenFlags.CLONE_SAME_RIGHTS 一起传递是无效的。

请求

名称类型
flags OpenFlags
object server_end<Node>

关闭

终止连接。

调用 Close 后,客户端不得发送任何其他请求。

服务器在发送状态响应后,无论处于何种状态,都应关闭连接,且不发送简介。

在语义上关闭渠道的客户端应等同于调用 Close,而不知道关闭操作何时完成或其状态。

请求

<EMPTY>

响应

名称类型
payload fuchsia.unknown/Closeable_Close_Result

创建符号链接。

name 是要为已创建的符号链接指定的名称。target 是符号链接的目标,在服务器上没有任何意义。除了服务器选择的长度上限之外,服务器不会对 target 执行任何验证。connection 是通道的可选服务器端,将在成功创建的节点上读出符号链接协议。

  • Rights.MODIFY_DIRECTORY

  • 如果 name 已经存在,则会发生 ZX_ERR_ALREADY_EXISTS 错误。

  • 如果 target 超出符号链接的服务器长度限制,则会出现 ZX_ERR_BAD_PATH 错误。

  • 如果 name 不是有效的名称,则出现错误 ZX_ERR_INVALID_ARGS

  • 如果服务器不支持创建符号链接,则会发生 ZX_ERR_NOT_SUPPORTED 错误。

添加日期:18
名称类型
name Name
target SymlinkTarget
connection server_end<Symlink>?
名称类型
payload Directory2_CreateSymlink_Result

枚举

从跳转偏移量 0 开始,在输入通道上启动目录列出操作。

此方法需要 Rights.ENUMERATE 权限。如果缺少此项权利,iterator 将以 ZX_ERR_ACCESS_DENIED 书写作为结束。

请求

名称类型
options DirectoryEnumerateOptions
iterator server_end<DirectoryIterator>

GetAttr

获取有关节点的信息。

此方法不需要任何权利。

请求

<EMPTY>

响应

名称类型
s zx/Status
attributes NodeAttributes

GetAttributes

获取有关节点的信息。

节点的属性应保持稳定,与用于访问它的特定协议无关。

如果某个属性不适用或不受支持,文件系统应忽略相应字段。

  • query:指定要提取哪些属性的位掩码。服务器返回的次数不应超过必要的数量。
  • attributes:返回的属性。

此方法需要 Rights.GET_ATTRIBUTES 权限。

请求

名称类型
query NodeAttributesQuery

响应

名称类型
payload Node2_GetAttributes_Result

GetConnectionInfo

获取有关连接的信息。

此方法不需要任何权利。

请求

<EMPTY>

响应

名称类型
payload ConnectionInfo

GetExtendedAttribute

获取与此节点的指定属性 name 相关联的值。

属性名称的长度上限为 MAX_ATTRIBUTE_NAME。系统不会对它们施加任何特定结构。

此方法需要 Rights.GET_ATTRIBUTES 权限。

添加日期:18

请求

名称类型
name ExtendedAttributeName

响应

名称类型
payload Node2_GetExtendedAttribute_Result

GetFlags

获取用于访问此文件的 Directory.Open 权限和标记。

此方法不需要任何权利。

请求

<EMPTY>

响应

名称类型
s zx/Status
flags OpenFlags

GetToken

获取目录的令牌,该令牌稍后可用于识别对目录的访问。只要请求令牌的连接保持打开状态,令牌就会一直有效。

此方法需要以下权限:OpenFlags.RIGHT_WRITABLE,否则返回 ZX_ERR_BAD_HANDLE

请求

<EMPTY>

响应

名称类型
s zx/Status
token handle<handle>?

在由令牌表示的目录中创建一个指向名为 src 的对象(名称为 dst)的链接。

src 必须是已解析的对象名称。在字符串中包含“/”将返回 ZX_ERR_INVALID_ARGS

dst 必须是已解析的对象名称。在字符串中包含“/”将返回 ZX_ERR_INVALID_ARGS

此方法需要以下权限:OpenFlags.RIGHT_WRITABLEOpenFlags.RIGHT_READABLE,否则返回 ZX_ERR_BAD_HANDLE

这在重命名或解除关联来源方面是原子性的,例如,如果两个操作者同时操作,其中一个执行者执行了影响此目录中来源的重命名,另一个执行者执行了链接,那么每个操作者都将按照未指定的顺序以原子方式发生。

名称类型
src string[255]
dst_parent_token handle<handle>
dst string[255]
名称类型
s zx/Status

ListExtendedAttributes

针对与此节点关联的所有扩展属性名称创建迭代器。如果发生错误,它会在迭代器请求通道上以 epitaph 形式返回,然后该通道将关闭。

GetExtendedAttributes 可与这些名称中的任何一个一起使用,以检索关联的值。

此方法需要 Rights.GET_ATTRIBUTES 权限。

添加日期:18

请求

名称类型
iterator server_end<ExtendedAttributeIterator>

OnOpen

如果 OpenFlags.DESCRIBE 请求,则由 FIDL 服务器紧急生成的事件。

指示打开操作的成功或失败,并且可以选择性地描述对象。如果状态为 ZX_OK,则 info 包含对象的描述性信息(与 Describe 返回的信息相同)。

响应

名称类型
s zx/Status
info NodeInfoDeprecated?

OnRepresentation

NodeFlags.GET_REPRESENTATION 请求且由服务器紧急生成的事件。此事件将是来自服务器的第一条消息,且仅发送一次。

活动变体对应于节点的某个受支持协议,并表示连接时协商的结果。提供辅助句柄(如果适用)。

如果客户端在 Directory.Open 期间在 protocols 中指定多个协议,则 Representation 还会通过其标记传递连接时协商的结果。

这些元素与 NodeProtocolKinds 的成员一对一对应。

这是 fuchsia.unknown/Queryable.Query + 特定协议上固有的 Describe 方法的特殊情况。它作为一项优化存在,以避免额外的往返。

响应

名称类型
payload Representation

打开

打开与此目录对象相关的新对象。

path 可以包含多个片段(以“/”字符分隔),且不得为空;即“”是无效路径。尾随斜杠表示 OpenFlags.DIRECTORY。组件不能为空(即“foo//bar”无效)。路径中的任何位置都不允许使用“..”。仅当路径为“.”时才允许使用“.”,其他情况则不行。允许前导“/”(与不存在时的处理方式相同,即“/foo/bar”和“foo/bar”相同)。

如果针对标志发送的未知值,应关闭连接。

flags 中提供的 OpenFlags.RIGHT_* 标志将限制对将与已打开实体相关联的 object 频道的访问权限。

权限从未增加。打开目录中的嵌套实体时,您只能请求与目录连接相同的权限或其中一部分权限。超出这些权限会导致系统将在 OnOpen 事件中传输“访问遭拒”错误(如果适用),并关闭 object 连接。

系统会忽略 mode

添加数量:12

请求

名称类型
flags OpenFlags
mode ModeType
path string[4095]
object server_end<Node>

Open2

打开或创建与此目录节点相关的新节点。

此方法需要对当前连接的以下权限:

错误在 object_request 频道上以歌名形式呈现。

  • 错误 ZX_ERR_ACCESS_DENIED
  • 如果 path 无效,则显示 ZX_ERR_BAD_PATH 错误。

请求

名称类型
path Path
protocols ConnectionProtocols
object_request handle<channel>

查询

请求

<EMPTY>

响应

名称类型
protocol vector<uint8>

QueryFilesystem

查询文件系统,以获取特定于文件系统的信息。

请求

<EMPTY>

响应

名称类型
s zx/Status
info FilesystemInfo?

ReadDirents

将一组大小不固定的脏页集合读取到缓冲区中。目录中的目录数量可能非常大:类似于对文件多次调用 read,目录具有一个跳转偏移量,该偏移量在后续调用 ReadDirents 时进行更新。对 ReadDirents 的每次调用将仅返回整个脏结构,它们不会在 ReadDirent 调用之间拆分。当跳转偏移量到达末尾时,dirents 将为空。

这些 dirent 的格式如下:

struct dirent {
  // Describes the inode of the entry.
  uint64 ino;
  // Describes the length of the dirent name in bytes.
  uint8 size;
  // Describes the type of the entry. Aligned with the
  // POSIX d_type values. Use `DirentType` constants.
  uint8 type;
  // Unterminated name of entry.
  char name[0];
}

此方法不需要任何权限,因为用户始终可以在文件创建过程中通过触发名称冲突来探测目录内容。

请求

名称类型
max_bytes uint64

响应

名称类型
s zx/Status
dirents vector<uint8>[8192]

RemoveExtendedAttribute

移除指定的扩展属性。

如果该属性不存在,则返回 ZX_ERR_NOT_FOUND。

此方法需要 Rights.UPDATE_ATTRIBUTES 权限。

添加日期:18

请求

名称类型
name ExtendedAttributeName

响应

名称类型
payload Node2_RemoveExtendedAttribute_Result

重命名

在由 dst_parent_token 表示的目录中,将名为 src 的节点重命名为 dst

srcdst 必须是有效的节点名称。如需了解有效名称的构成,请参阅名称

此方法需要对当前连接以及由 dst_parent_token 标识的连接拥有以下权限:

为避免权利升级,必须满足以下要求。

如果源目录和目标目录不同,源目录还必须具有文件所支持的最大能力集,通常为 Rights.READ_BYTESRights.WRITE_BYTESRights.GET_ATTRIBUTESRights.UPDATE_ATTRIBUTES。某些文件系统可能也支持 Rights.EXECUTE 权限。

如果 src 引用目录,且与目标目录不同,则源目录还必须具有 Rights.CONNECTRights.TRAVERSE 权限。

  • 如果 srcdst 无效,则显示 ZX_ERR_INVALID_ARGS 错误。
  • 错误 ZX_ERR_ACCESS_DENIED

请求

名称类型
src Name
dst_parent_token Token
dst Name

响应

名称类型
payload Directory2_Rename_Result

重新标记为营业

创建与同一节点的另一个连接。

请求

名称类型
rights_request RightsRequest
object_request server_end<Node>

快退

重置目录跳转偏移量。

与 ReadDirents 类似,此方法不需要任何权限。

请求

<EMPTY>

响应

名称类型
s zx/Status

SetAttr

更新节点的相关信息。

此方法需要以下权限:OpenFlags.RIGHT_WRITABLE,否则返回 ZX_ERR_BAD_HANDLE

请求

名称类型
flags NodeAttributeFlags
attributes NodeAttributes

响应

名称类型
s zx/Status

SetExtendedAttribute

将此节点的给定属性 name 的值设置为 value

属性名称可能存在,在这种情况下,系统会更新属性。 如果该属性不存在,系统会创建一个。名称中不得包含 null 字节。如果相同,则返回 ZX_ERR_INVALID_ARGS。

此方法需要 Rights.UPDATE_ATTRIBUTES 权限。

添加日期:18

请求

名称类型
name ExtendedAttributeName
value ExtendedAttributeValue
mode SetExtendedAttributeMode

响应

名称类型
payload Node2_SetExtendedAttribute_Result

SetFlags

更改用于访问文件的 Directory.Open 标志。支持可开启 / 关闭的标志:

  • OpenFlags.APPEND

此方法不需要任何权利。

请求

名称类型
flags OpenFlags

响应

名称类型
s zx/Status

同步

将节点的更新同步到底层媒体(如果存在)。

当文件系统服务器已刷新对底层媒体的相关更新时,此方法将返回,但不保证底层媒体已经保留这些信息,也不保证任何信息已提交到硬件。客户端可以使用 Sync 来确保各项操作之间的排序。

此方法不需要任何权利。

请求

<EMPTY>

响应

名称类型
payload Node2_Sync_Result

从此目录的条目列表中移除子节点。

注意:这并不能保证底层对象会被销毁。尽管该链接会从父级目录中移除,但具有多个引用的对象(例如仍处于打开状态的文件)实际上并不会销毁,除非所有引用都关闭。

  • 如果连接没有 Rights.WRITE_BYTES,则系统会返回 ZX_ERR_ACCESS_DENIED 错误。
  • 如果底层文件系统不支持写入,则会显示 ZX_ERR_NOT_SUPPORTED 错误。
  • 如果 name 无效,则显示 ZX_ERR_BAD_PATH 错误。
  • 如果 name 引用非空目录,则错误代码为 ZX_ERR_NOT_EMPTY
  • 如果 name 引用包含远程通道的装载点,则显示 ZX_ERR_UNAVAILABLE 错误。
  • 如果选项请求了目录,但找到了除目录之外的其他内容,则会显示 ZX_ERR_NOT_DIR 错误。

由于特定于文件系统的原因,也可能会返回其他错误。

此方法需要以下权限:

名称类型
name Name
options UnlinkOptions
名称类型
payload Directory2_Unlink_Result

UpdateAttributes

更新节点的相关信息。

  • attributes,如果 attributes 中存在表字段,则表示意图更新相应属性。

此方法需要 Rights.UPDATE_ATTRIBUTES 权限。

请求

名称类型
payload MutableNodeAttributes

响应

名称类型
payload Node2_UpdateAttributes_Result

观看

监视目录,在 Watcher 请求渠道上接收已添加消息的事件。

选项必须为零;系统保留了该选项。

与 ReadDirents 类似,此方法不需要任何权限。

请求

名称类型
mask WatchMask
options uint32
watcher server_end<DirectoryWatcher>

响应

名称类型
s zx/Status

Directory1

fuchsia.io/directory.fidl 中定义

Directory 定义了能够包含其他对象的节点。

克隆

创建与同一远程对象的另一个连接。

flags 可以是以下任何一项:

  • OpenFlags.RIGHT_*
  • OpenFlags.APPEND
  • OpenFlags.DESCRIBE
  • OpenFlags.CLONE_SAME_RIGHTS

所有其他标志均会被忽略。

flags 中的 OpenFlags.RIGHT_* 位会请求对生成的克隆对象对应的权限。 克隆对象的权限必须大于或等于原始对象,否则会返回 ZX_ERR_ACCESS_DENIED。 或者,传递 OpenFlags.CLONE_SAME_RIGHTS 以继承针对来源连接的权限。 将任何 OpenFlags.RIGHT_* 标志与 OpenFlags.CLONE_SAME_RIGHTS 一起传递是无效的。

请求

名称类型
flags OpenFlags
object server_end<Node>

GetAttr

获取有关节点的信息。

此方法不需要任何权利。

请求

<EMPTY>

响应

名称类型
s zx/Status
attributes NodeAttributes

GetFlags

获取用于访问此文件的 Directory.Open 权限和标记。

此方法不需要任何权利。

请求

<EMPTY>

响应

名称类型
s zx/Status
flags OpenFlags

GetToken

获取目录的令牌,该令牌稍后可用于识别对目录的访问。只要请求令牌的连接保持打开状态,令牌就会一直有效。

此方法需要以下权限:OpenFlags.RIGHT_WRITABLE,否则返回 ZX_ERR_BAD_HANDLE

请求

<EMPTY>

响应

名称类型
s zx/Status
token handle<handle>?

在由令牌表示的目录中创建一个指向名为 src 的对象(名称为 dst)的链接。

src 必须是已解析的对象名称。在字符串中包含“/”将返回 ZX_ERR_INVALID_ARGS

dst 必须是已解析的对象名称。在字符串中包含“/”将返回 ZX_ERR_INVALID_ARGS

此方法需要以下权限:OpenFlags.RIGHT_WRITABLEOpenFlags.RIGHT_READABLE,否则返回 ZX_ERR_BAD_HANDLE

这在重命名或解除关联来源方面是原子性的,例如,如果两个操作者同时操作,其中一个执行者执行了影响此目录中来源的重命名,另一个执行者执行了链接,那么每个操作者都将按照未指定的顺序以原子方式发生。

名称类型
src string[255]
dst_parent_token handle<handle>
dst string[255]
名称类型
s zx/Status

OnOpen

如果 OpenFlags.DESCRIBE 请求,则由 FIDL 服务器紧急生成的事件。

指示打开操作的成功或失败,并且可以选择性地描述对象。如果状态为 ZX_OK,则 info 包含对象的描述性信息(与 Describe 返回的信息相同)。

响应

名称类型
s zx/Status
info NodeInfoDeprecated?

打开

打开与此目录对象相关的新对象。

path 可以包含多个片段(以“/”字符分隔),且不得为空;即“”是无效路径。尾随斜杠表示 OpenFlags.DIRECTORY。组件不能为空(即“foo//bar”无效)。路径中的任何位置都不允许使用“..”。仅当路径为“.”时才允许使用“.”,其他情况则不行。允许前导“/”(与不存在时的处理方式相同,即“/foo/bar”和“foo/bar”相同)。

如果针对标志发送的未知值,应关闭连接。

flags 中提供的 OpenFlags.RIGHT_* 标志将限制对将与已打开实体相关联的 object 频道的访问权限。

权限从未增加。打开目录中的嵌套实体时,您只能请求与目录连接相同的权限或其中一部分权限。超出这些权限会导致系统将在 OnOpen 事件中传输“访问遭拒”错误(如果适用),并关闭 object 连接。

系统会忽略 mode

添加数量:12

请求

名称类型
flags OpenFlags
mode ModeType
path string[4095]
object server_end<Node>

QueryFilesystem

查询文件系统,以获取特定于文件系统的信息。

请求

<EMPTY>

响应

名称类型
s zx/Status
info FilesystemInfo?

ReadDirents

将一组大小不固定的脏页集合读取到缓冲区中。目录中的目录数量可能非常大:类似于对文件多次调用 read,目录具有一个跳转偏移量,该偏移量在后续调用 ReadDirents 时进行更新。对 ReadDirents 的每次调用将仅返回整个脏结构,它们不会在 ReadDirent 调用之间拆分。当跳转偏移量到达末尾时,dirents 将为空。

这些 dirent 的格式如下:

struct dirent {
  // Describes the inode of the entry.
  uint64 ino;
  // Describes the length of the dirent name in bytes.
  uint8 size;
  // Describes the type of the entry. Aligned with the
  // POSIX d_type values. Use `DirentType` constants.
  uint8 type;
  // Unterminated name of entry.
  char name[0];
}

此方法不需要任何权限,因为用户始终可以在文件创建过程中通过触发名称冲突来探测目录内容。

请求

名称类型
max_bytes uint64

响应

名称类型
s zx/Status
dirents vector<uint8>[8192]

快退

重置目录跳转偏移量。

与 ReadDirents 类似,此方法不需要任何权限。

请求

<EMPTY>

响应

名称类型
s zx/Status

SetAttr

更新节点的相关信息。

此方法需要以下权限:OpenFlags.RIGHT_WRITABLE,否则返回 ZX_ERR_BAD_HANDLE

请求

名称类型
flags NodeAttributeFlags
attributes NodeAttributes

响应

名称类型
s zx/Status

SetFlags

更改用于访问文件的 Directory.Open 标志。支持可开启 / 关闭的标志:

  • OpenFlags.APPEND

此方法不需要任何权利。

请求

名称类型
flags OpenFlags

响应

名称类型
s zx/Status

观看

监视目录,在 Watcher 请求渠道上接收已添加消息的事件。

选项必须为零;系统保留了该选项。

与 ReadDirents 类似,此方法不需要任何权限。

请求

名称类型
mask WatchMask
options uint32
watcher server_end<DirectoryWatcher>

响应

名称类型
s zx/Status

Directory2

fuchsia.io/directory2.fidl 中定义

能够包含其他节点的 Node2

AdvisoryLock

获取底层文件上的建议锁。

锁定将持续到关闭此连接或使用 |AdvisoryLockType.UNLOCK| 调用此方法来显式释放锁定。

Advisory Lock 纯粹是建议。不会阻止通过此连接或其他连接对文件执行实际的读取或写入操作。

此方法需要以下权限:

错误

  • ZX_ERR_BAD_STATE无法获取指定的锁定类型。例如,另一个连接可能具有存在冲突的锁定类型。
  • ZX_ERR_NOT_SUPPORTED 此文件不支持建议性锁定。
  • ZX_ERR_ACCESS_DENIED 此连接没有足够的权限获取指定类型的锁定。

请求

名称类型
request AdvisoryLockRequest

响应

名称类型
payload AdvisoryLocking_AdvisoryLock_Result

关闭

终止连接。

调用 Close 后,客户端不得发送任何其他请求。

服务器在发送状态响应后,无论处于何种状态,都应关闭连接,且不发送简介。

在语义上关闭渠道的客户端应等同于调用 Close,而不知道关闭操作何时完成或其状态。

请求

<EMPTY>

响应

名称类型
payload fuchsia.unknown/Closeable_Close_Result

创建符号链接。

name 是要为已创建的符号链接指定的名称。target 是符号链接的目标,在服务器上没有任何意义。除了服务器选择的长度上限之外,服务器不会对 target 执行任何验证。connection 是通道的可选服务器端,将在成功创建的节点上读出符号链接协议。

  • Rights.MODIFY_DIRECTORY

  • 如果 name 已经存在,则会发生 ZX_ERR_ALREADY_EXISTS 错误。

  • 如果 target 超出符号链接的服务器长度限制,则会出现 ZX_ERR_BAD_PATH 错误。

  • 如果 name 不是有效的名称,则出现错误 ZX_ERR_INVALID_ARGS

  • 如果服务器不支持创建符号链接,则会发生 ZX_ERR_NOT_SUPPORTED 错误。

添加日期:18
名称类型
name Name
target SymlinkTarget
connection server_end<Symlink>?
名称类型
payload Directory2_CreateSymlink_Result

枚举

从跳转偏移量 0 开始,在输入通道上启动目录列出操作。

此方法需要 Rights.ENUMERATE 权限。如果缺少此项权利,iterator 将以 ZX_ERR_ACCESS_DENIED 书写作为结束。

请求

名称类型
options DirectoryEnumerateOptions
iterator server_end<DirectoryIterator>

GetAttributes

获取有关节点的信息。

节点的属性应保持稳定,与用于访问它的特定协议无关。

如果某个属性不适用或不受支持,文件系统应忽略相应字段。

  • query:指定要提取哪些属性的位掩码。服务器返回的次数不应超过必要的数量。
  • attributes:返回的属性。

此方法需要 Rights.GET_ATTRIBUTES 权限。

请求

名称类型
query NodeAttributesQuery

响应

名称类型
payload Node2_GetAttributes_Result

GetConnectionInfo

获取有关连接的信息。

此方法不需要任何权利。

请求

<EMPTY>

响应

名称类型
payload ConnectionInfo

GetExtendedAttribute

获取与此节点的指定属性 name 相关联的值。

属性名称的长度上限为 MAX_ATTRIBUTE_NAME。系统不会对它们施加任何特定结构。

此方法需要 Rights.GET_ATTRIBUTES 权限。

添加日期:18

请求

名称类型
name ExtendedAttributeName

响应

名称类型
payload Node2_GetExtendedAttribute_Result

ListExtendedAttributes

针对与此节点关联的所有扩展属性名称创建迭代器。如果发生错误,它会在迭代器请求通道上以 epitaph 形式返回,然后该通道将关闭。

GetExtendedAttributes 可与这些名称中的任何一个一起使用,以检索关联的值。

此方法需要 Rights.GET_ATTRIBUTES 权限。

添加日期:18

请求

名称类型
iterator server_end<ExtendedAttributeIterator>

OnRepresentation

NodeFlags.GET_REPRESENTATION 请求且由服务器紧急生成的事件。此事件将是来自服务器的第一条消息,且仅发送一次。

活动变体对应于节点的某个受支持协议,并表示连接时协商的结果。提供辅助句柄(如果适用)。

如果客户端在 Directory.Open 期间在 protocols 中指定多个协议,则 Representation 还会通过其标记传递连接时协商的结果。

这些元素与 NodeProtocolKinds 的成员一对一对应。

这是 fuchsia.unknown/Queryable.Query + 特定协议上固有的 Describe 方法的特殊情况。它作为一项优化存在,以避免额外的往返。

响应

名称类型
payload Representation

Open2

打开或创建与此目录节点相关的新节点。

此方法需要对当前连接的以下权限:

错误在 object_request 频道上以歌名形式呈现。

  • 错误 ZX_ERR_ACCESS_DENIED
  • 如果 path 无效,则显示 ZX_ERR_BAD_PATH 错误。

请求

名称类型
path Path
protocols ConnectionProtocols
object_request handle<channel>

查询

请求

<EMPTY>

响应

名称类型
protocol vector<uint8>

RemoveExtendedAttribute

移除指定的扩展属性。

如果该属性不存在,则返回 ZX_ERR_NOT_FOUND。

此方法需要 Rights.UPDATE_ATTRIBUTES 权限。

添加日期:18

请求

名称类型
name ExtendedAttributeName

响应

名称类型
payload Node2_RemoveExtendedAttribute_Result

重命名

在由 dst_parent_token 表示的目录中,将名为 src 的节点重命名为 dst

srcdst 必须是有效的节点名称。如需了解有效名称的构成,请参阅名称

此方法需要对当前连接以及由 dst_parent_token 标识的连接拥有以下权限:

为避免权利升级,必须满足以下要求。

如果源目录和目标目录不同,源目录还必须具有文件所支持的最大能力集,通常为 Rights.READ_BYTESRights.WRITE_BYTESRights.GET_ATTRIBUTESRights.UPDATE_ATTRIBUTES。某些文件系统可能也支持 Rights.EXECUTE 权限。

如果 src 引用目录,且与目标目录不同,则源目录还必须具有 Rights.CONNECTRights.TRAVERSE 权限。

  • 如果 srcdst 无效,则显示 ZX_ERR_INVALID_ARGS 错误。
  • 错误 ZX_ERR_ACCESS_DENIED

请求

名称类型
src Name
dst_parent_token Token
dst Name

响应

名称类型
payload Directory2_Rename_Result

重新标记为营业

创建与同一节点的另一个连接。

请求

名称类型
rights_request RightsRequest
object_request server_end<Node>

SetExtendedAttribute

将此节点的给定属性 name 的值设置为 value

属性名称可能存在,在这种情况下,系统会更新属性。 如果该属性不存在,系统会创建一个。名称中不得包含 null 字节。如果相同,则返回 ZX_ERR_INVALID_ARGS。

此方法需要 Rights.UPDATE_ATTRIBUTES 权限。

添加日期:18

请求

名称类型
name ExtendedAttributeName
value ExtendedAttributeValue
mode SetExtendedAttributeMode

响应

名称类型
payload Node2_SetExtendedAttribute_Result

同步

将节点的更新同步到底层媒体(如果存在)。

当文件系统服务器已刷新对底层媒体的相关更新时,此方法将返回,但不保证底层媒体已经保留这些信息,也不保证任何信息已提交到硬件。客户端可以使用 Sync 来确保各项操作之间的排序。

此方法不需要任何权利。

请求

<EMPTY>

响应

名称类型
payload Node2_Sync_Result

从此目录的条目列表中移除子节点。

注意:这并不能保证底层对象会被销毁。尽管该链接会从父级目录中移除,但具有多个引用的对象(例如仍处于打开状态的文件)实际上并不会销毁,除非所有引用都关闭。

  • 如果连接没有 Rights.WRITE_BYTES,则系统会返回 ZX_ERR_ACCESS_DENIED 错误。
  • 如果底层文件系统不支持写入,则会显示 ZX_ERR_NOT_SUPPORTED 错误。
  • 如果 name 无效,则显示 ZX_ERR_BAD_PATH 错误。
  • 如果 name 引用非空目录,则错误代码为 ZX_ERR_NOT_EMPTY
  • 如果 name 引用包含远程通道的装载点,则显示 ZX_ERR_UNAVAILABLE 错误。
  • 如果选项请求了目录,但找到了除目录之外的其他内容,则会显示 ZX_ERR_NOT_DIR 错误。

由于特定于文件系统的原因,也可能会返回其他错误。

此方法需要以下权限:

名称类型
name Name
options UnlinkOptions
名称类型
payload Directory2_Unlink_Result

UpdateAttributes

更新节点的相关信息。

  • attributes,如果 attributes 中存在表字段,则表示意图更新相应属性。

此方法需要 Rights.UPDATE_ATTRIBUTES 权限。

请求

名称类型
payload MutableNodeAttributes

响应

名称类型
payload Node2_UpdateAttributes_Result

DirectoryIterator

fuchsia.io/directory2.fidl 中定义

GetNext

将大小可变的目录条目集合读取到缓冲区中。

目录中的条目数可能非常大:就像对文件多次调用读取一样,目录具有跳转偏移量,该偏移量在后续调用 Enumerate 时更新。调用方应始终使用与通道上限一样的接收缓冲区大小。

迭代结束时,返回的 entries 矢量将为空。

此方法不需要任何权限,因为权限在 Directory.Enumerate 调用中检查。

请求

<EMPTY>

响应

名称类型
payload DirectoryIterator_GetNext_Result

DirectoryWatcher

fuchsia.io/directory.fidl 中定义

DirectoryWatcher 会从文件系统服务器传输有关文件系统中发生的事件的消息。客户端可以使用 Directory.Watch 方法注册新的观察器,在该方法中,它们可以过滤要接收哪些事件的通知。

DirectoryWatcher 会发送以下形式的消息:

struct {
  uint8 event;
  uint8 len;
  char name[];
};

其中,名称不是以 null 结尾的。该名称是事件所引用条目的相对路径。如果事件未引用特定条目(例如,针对 IDLE 事件),此字段将为空。

ExtendedAttributeIterator

fuchsia.io/node2.fidl 中定义

添加日期:18

GetNext

获取下一个扩展属性名称。如果这是最后一个数据块,最后一个数据块为 true,相应通道将在调用后关闭。

请求

<EMPTY>

响应

名称类型
payload ExtendedAttributeIterator_GetNext_Result

文件

fuchsia.io/file2.fidl 中定义

一个 Node,包含一系列具有固定长度的字节。

注意:克隆的连接不会与其源连接共享其跳转偏移量。

AdvisoryLock

获取底层文件上的建议锁。

锁定将持续到关闭此连接或使用 |AdvisoryLockType.UNLOCK| 调用此方法来显式释放锁定。

Advisory Lock 纯粹是建议。不会阻止通过此连接或其他连接对文件执行实际的读取或写入操作。

此方法需要以下权限:

错误

  • ZX_ERR_BAD_STATE无法获取指定的锁定类型。例如,另一个连接可能具有存在冲突的锁定类型。
  • ZX_ERR_NOT_SUPPORTED 此文件不支持建议性锁定。
  • ZX_ERR_ACCESS_DENIED 此连接没有足够的权限获取指定类型的锁定。

请求

名称类型
request AdvisoryLockRequest

响应

名称类型
payload AdvisoryLocking_AdvisoryLock_Result

分配

为此文件预先分配磁盘空间。

添加了:HEAD

请求

名称类型
offset uint64
length uint64
mode AllocateMode

响应

名称类型
payload File_Allocate_Result

克隆

创建与同一远程对象的另一个连接。

flags 可以是以下任何一项:

  • OpenFlags.RIGHT_*
  • OpenFlags.APPEND
  • OpenFlags.DESCRIBE
  • OpenFlags.CLONE_SAME_RIGHTS

所有其他标志均会被忽略。

flags 中的 OpenFlags.RIGHT_* 位会请求对生成的克隆对象对应的权限。 克隆对象的权限必须大于或等于原始对象,否则会返回 ZX_ERR_ACCESS_DENIED。 或者,传递 OpenFlags.CLONE_SAME_RIGHTS 以继承针对来源连接的权限。 将任何 OpenFlags.RIGHT_* 标志与 OpenFlags.CLONE_SAME_RIGHTS 一起传递是无效的。

请求

名称类型
flags OpenFlags
object server_end<Node>

关闭

终止连接。

调用 Close 后,客户端不得发送任何其他请求。

服务器在发送状态响应后,无论处于何种状态,都应关闭连接,且不发送简介。

在语义上关闭渠道的客户端应等同于调用 Close,而不知道关闭操作何时完成或其状态。

请求

<EMPTY>

响应

名称类型
payload fuchsia.unknown/Closeable_Close_Result

描述

请求

<EMPTY>

响应

名称类型
payload FileInfo

EnableVerity

为文件启用验证(永久),这涉及到为文件计算 Merkle 树。在构建 Merkle 树之前强制刷新,以确保捕获缓存的数据。系统将根据计算的 Merkle 树验证后续读取,并拒绝写入。此方法可能需要一些时间才能完成,具体取决于文件的大小。可通过关闭触发此方法的连接来取消此方法。

此方法需要 Rights.UPDATE_ATTRIBUTES 权限。如果文件系统不支持 verity,则返回 ZX_ERR_NOT_SUPPORTED。如果文件已启用 fsverity,则返回 ZX_ERR_ALREADY_EXISTS。 此外,还会返回可能因读取文件或刷新文件而引起的任何错误,例如 ZX_ERR_IO

添加了:HEAD

请求

名称类型
options VerificationOptions

响应

名称类型
payload File_EnableVerity_Result

GetAttr

获取有关节点的信息。

此方法不需要任何权利。

请求

<EMPTY>

响应

名称类型
s zx/Status
attributes NodeAttributes

GetAttributes

获取有关节点的信息。

节点的属性应保持稳定,与用于访问它的特定协议无关。

如果某个属性不适用或不受支持,文件系统应忽略相应字段。

  • query:指定要提取哪些属性的位掩码。服务器返回的次数不应超过必要的数量。
  • attributes:返回的属性。

此方法需要 Rights.GET_ATTRIBUTES 权限。

请求

名称类型
query NodeAttributesQuery

响应

名称类型
payload Node2_GetAttributes_Result

GetBackingMemory

获取代表此文件的 zx.Handle:VMO(如果有),它具有所请求的访问权限。

实现由 VMO 支持的文件不需要实现,因此此请求可能会失败。此外,实现可能仅支持部分标志。如果此请求失败,客户端应准备好回退行为。

如果客户端既未指定 PRIVATE_CLONE 也未指定 SHARED_BUFFER,则实现可自由选择返回的 VMO 的语义。

  • flags 请求一个 VmoFlags,以指明所需的访问模式。
  • 错误,出现表示失败的 zx.Status 值。

此方法需要以下权限:

请求

名称类型
flags VmoFlags

响应

名称类型
payload File_GetBackingMemory_Result

GetConnectionInfo

获取有关连接的信息。

此方法不需要任何权利。

请求

<EMPTY>

响应

名称类型
payload ConnectionInfo

GetExtendedAttribute

获取与此节点的指定属性 name 相关联的值。

属性名称的长度上限为 MAX_ATTRIBUTE_NAME。系统不会对它们施加任何特定结构。

此方法需要 Rights.GET_ATTRIBUTES 权限。

添加日期:18

请求

名称类型
name ExtendedAttributeName

响应

名称类型
payload Node2_GetExtendedAttribute_Result

GetFlags

获取用于访问此文件的 Directory.Open 权限和标记。

此方法不需要任何权利。

请求

<EMPTY>

响应

名称类型
s zx/Status
flags OpenFlags

LinkInto

在由 dst_parent_token 表示的目录中创建一个名为 dst 的此对象的链接。

dst 必须是已解析的对象名称。在字符串中包含“/”将返回 ZX_ERR_INVALID_ARGS

使用此方法时,您只需要文件系统支持对此对象最多拥有一组权限。 对于文件,通常为 Rights.READ_BYTESRights.WRITE_BYTESRights.GET_ATTRIBUTESRights.UPDATE_ATTRIBUTES。某些文件系统可能也支持 Rights.EXECUTE 权限。权限不足将导致 ZX_ERR_ACCESS_DENIED

如果此对象没有任何链接,则会失败并显示 ZX_ERR_NOT_FOUND

此方法具有 Directory::Link 方法的原子性属性,这意味着先调用 Open 后调用 LinkInto 并不等同于先调用 Directory::Link,因为 LinkInto 不会阻止来源被重命名或解除关联。

请求

名称类型
dst_parent_token Token
dst Name

响应

名称类型
payload Linkable_LinkInto_Result

ListExtendedAttributes

针对与此节点关联的所有扩展属性名称创建迭代器。如果发生错误,它会在迭代器请求通道上以 epitaph 形式返回,然后该通道将关闭。

GetExtendedAttributes 可与这些名称中的任何一个一起使用,以检索关联的值。

此方法需要 Rights.GET_ATTRIBUTES 权限。

添加日期:18

请求

名称类型
iterator server_end<ExtendedAttributeIterator>

OnOpen

如果 OpenFlags.DESCRIBE 请求,则由 FIDL 服务器紧急生成的事件。

指示打开操作的成功或失败,并且可以选择性地描述对象。如果状态为 ZX_OK,则 info 包含对象的描述性信息(与 Describe 返回的信息相同)。

响应

名称类型
s zx/Status
info NodeInfoDeprecated?

OnRepresentation

NodeFlags.GET_REPRESENTATION 请求且由服务器紧急生成的事件。此事件将是来自服务器的第一条消息,且仅发送一次。

活动变体对应于节点的某个受支持协议,并表示连接时协商的结果。提供辅助句柄(如果适用)。

如果客户端在 Directory.Open 期间在 protocols 中指定多个协议,则 Representation 还会通过其标记传递连接时协商的结果。

这些元素与 NodeProtocolKinds 的成员一对一对应。

这是 fuchsia.unknown/Queryable.Query + 特定协议上固有的 Describe 方法的特殊情况。它作为一项优化存在,以避免额外的往返。

响应

名称类型
payload Representation

查询

请求

<EMPTY>

响应

名称类型
protocol vector<uint8>

QueryFilesystem

查询文件系统,以获取特定于文件系统的信息。

请求

<EMPTY>

响应

名称类型
s zx/Status
info FilesystemInfo?

立即查阅

在跳转偏移量处最多读取到 'count' 个字节。 跳转偏移量按读取的字节数向前移动。

不变量

  • 返回的 data.length 绝不会大于 count
  • 如果 data.length 小于 count,则表示跳转偏移量在此操作过程中已到达文件末尾。
  • 如果 data.length 为零,而 count 不为 0,则表示跳转偏移量已位于或超出文件末尾,且无法读取任何数据。
  • 如果 count 为零,服务器应执行所有检查以确保能进行读取而不实际读取任何内容,并返回空的 data 矢量。

此方法需要 Rights.READ_BYTES 权限。

如果 count 大于 MAX_TRANSFER_SIZE,则返回 ZX_ERR_OUT_OF_RANGE

请求

名称类型
count uint64

响应

名称类型
payload Readable_Read_Result

ReadAt

在提供的偏移量处最多读取 'count' 个字节。 不影响跳转偏移量。

不变量

  • 返回的 data.length 绝不会大于 count
  • 如果 data.length 小于 count,则表示 ReadAt 在此操作中已到达文件末尾。
  • 如果 data.length 为零,而 count 不为零,则表示 offset 已到达或超过文件末尾,且无法读取任何数据。
  • 如果 count 为零,服务器应执行所有检查以确保读取访问而不实际读取任何内容,并返回空的 data 矢量。

此方法需要 Rights.READ_BYTES 权限。

如果 count 大于 MAX_TRANSFER_SIZE,则返回 ZX_ERR_OUT_OF_RANGE

请求

名称类型
count uint64
offset uint64

响应

名称类型
payload File_ReadAt_Result

RemoveExtendedAttribute

移除指定的扩展属性。

如果该属性不存在,则返回 ZX_ERR_NOT_FOUND。

此方法需要 Rights.UPDATE_ATTRIBUTES 权限。

添加日期:18

请求

名称类型
name ExtendedAttributeName

响应

名称类型
payload Node2_RemoveExtendedAttribute_Result

重新标记为营业

创建与同一节点的另一个连接。

请求

名称类型
rights_request RightsRequest
object_request server_end<Node>

调整大小

将文件大小压缩或增长到“length”字节。

如果此操作减小了文件大小,额外的尾随数据将被舍弃。 如果此操作增加了文件大小,扩展区域就会出现看似为零的情况。

此方法需要 Rights.WRITE_BYTES 权限。

请求

名称类型
length uint64

响应

名称类型
payload File_Resize_Result

进度

移动下一次调用 ReadWrite 时的偏移量。跳转偏移量特定于每个文件连接。

  • origin 请求 offset 所依据的参照点。
  • 请求 offset 表示要搜寻的字节数。
  • 响应 offset_from_start 调整后的跳转偏移量。

此方法不需要任何权利。

请求

名称类型
origin SeekOrigin
offset int64

响应

名称类型
payload File_Seek_Result

SetAttr

更新节点的相关信息。

此方法需要以下权限:OpenFlags.RIGHT_WRITABLE,否则返回 ZX_ERR_BAD_HANDLE

请求

名称类型
flags NodeAttributeFlags
attributes NodeAttributes

响应

名称类型
s zx/Status

SetExtendedAttribute

将此节点的给定属性 name 的值设置为 value

属性名称可能存在,在这种情况下,系统会更新属性。 如果该属性不存在,系统会创建一个。名称中不得包含 null 字节。如果相同,则返回 ZX_ERR_INVALID_ARGS。

此方法需要 Rights.UPDATE_ATTRIBUTES 权限。

添加日期:18

请求

名称类型
name ExtendedAttributeName
value ExtendedAttributeValue
mode SetExtendedAttributeMode

响应

名称类型
payload Node2_SetExtendedAttribute_Result

SetFlags

更改用于访问文件的 Directory.Open 标志。支持可开启 / 关闭的标志:

  • OpenFlags.APPEND

此方法不需要任何权利。

请求

名称类型
flags OpenFlags

响应

名称类型
s zx/Status

同步

将节点的更新同步到底层媒体(如果存在)。

当文件系统服务器已刷新对底层媒体的相关更新时,此方法将返回,但不保证底层媒体已经保留这些信息,也不保证任何信息已提交到硬件。客户端可以使用 Sync 来确保各项操作之间的排序。

此方法不需要任何权利。

请求

<EMPTY>

响应

名称类型
payload Node2_Sync_Result

UpdateAttributes

更新节点的相关信息。

  • attributes,如果 attributes 中存在表字段,则表示意图更新相应属性。

此方法需要 Rights.UPDATE_ATTRIBUTES 权限。

请求

名称类型
payload MutableNodeAttributes

响应

名称类型
payload Node2_UpdateAttributes_Result

写入

按跳转偏移量写入数据。 跳转偏移量按写入的字节数向前移动。如果文件处于附加模式,则跳转偏移量首先设置为文件末尾,然后是一个原子步骤,然后写入。

如果跳转偏移量加上 data.length 超出文件当前末尾,则文件大小可能会增大。

  • 请求 data 字节缓冲区以写入文件。
  • 响应 actual_count 写入的字节数。

不变量

  • 返回的 actual_count 绝不会大于 data.length
  • 如果服务器因空间不足而无法写入所有数据,则 actual_count 可能会小于 data.length。如果没有可写入的字节,则返回错误。
  • 如果 data.length 为零,服务器应执行所有检查以确保在不改变文件的情况下进行写入访问,并返回零字节的成功写入。在附加模式下,跳转偏移量仍会更新。

此方法需要 Rights.WRITE_BYTES 权限。

请求

名称类型
data Transfer

响应

名称类型
payload Writable_Write_Result

WriteAt

按照提供的偏移量写入数据。 不影响跳转偏移量。

如果 offset 加上 data.length 超出当前文件末尾,则文件大小可能会增大。

  • 请求 data 字节缓冲区以写入文件。
  • offset 请求从文件开头开始写入的偏移量。
  • 响应 actual_count 写入的字节数。

不变量

  • 返回的 actual_count 绝不会大于 data.length
  • 如果服务器因空间不足而无法写入所有数据,则 actual_count 可能会小于 data.length。如果没有可写入的字节,则返回错误。
  • 如果 data.length 为零,服务器应执行所有检查以确保在不更改文件的情况下进行写入访问,并将返回零字节的成功写入。

此方法需要 Rights.WRITE_BYTES 权限。

请求

名称类型
data Transfer
offset uint64

响应

名称类型
payload File_WriteAt_Result

可连接

fuchsia.io/node2.fidl 中定义

添加日期:18

LinkInto

在由 dst_parent_token 表示的目录中创建一个名为 dst 的此对象的链接。

dst 必须是已解析的对象名称。在字符串中包含“/”将返回 ZX_ERR_INVALID_ARGS

使用此方法时,您只需要文件系统支持对此对象最多拥有一组权限。 对于文件,通常为 Rights.READ_BYTESRights.WRITE_BYTESRights.GET_ATTRIBUTESRights.UPDATE_ATTRIBUTES。某些文件系统可能也支持 Rights.EXECUTE 权限。权限不足将导致 ZX_ERR_ACCESS_DENIED

如果此对象没有任何链接,则会失败并显示 ZX_ERR_NOT_FOUND

此方法具有 Directory::Link 方法的原子性属性,这意味着先调用 Open 后调用 LinkInto 并不等同于先调用 Directory::Link,因为 LinkInto 不会阻止来源被重命名或解除关联。

请求

名称类型
dst_parent_token Token
dst Name

响应

名称类型
payload Linkable_LinkInto_Result

节点

fuchsia.io/node.fidl 中定义

克隆

创建与同一远程对象的另一个连接。

flags 可以是以下任何一项:

  • OpenFlags.RIGHT_*
  • OpenFlags.APPEND
  • OpenFlags.DESCRIBE
  • OpenFlags.CLONE_SAME_RIGHTS

所有其他标志均会被忽略。

flags 中的 OpenFlags.RIGHT_* 位会请求对生成的克隆对象对应的权限。 克隆对象的权限必须大于或等于原始对象,否则会返回 ZX_ERR_ACCESS_DENIED。 或者,传递 OpenFlags.CLONE_SAME_RIGHTS 以继承针对来源连接的权限。 将任何 OpenFlags.RIGHT_* 标志与 OpenFlags.CLONE_SAME_RIGHTS 一起传递是无效的。

请求

名称类型
flags OpenFlags
object server_end<Node>

关闭

终止连接。

调用 Close 后,客户端不得发送任何其他请求。

服务器在发送状态响应后,无论处于何种状态,都应关闭连接,且不发送简介。

在语义上关闭渠道的客户端应等同于调用 Close,而不知道关闭操作何时完成或其状态。

请求

<EMPTY>

响应

名称类型
payload fuchsia.unknown/Closeable_Close_Result

GetAttr

获取有关节点的信息。

此方法不需要任何权利。

请求

<EMPTY>

响应

名称类型
s zx/Status
attributes NodeAttributes

GetAttributes

获取有关节点的信息。

节点的属性应保持稳定,与用于访问它的特定协议无关。

如果某个属性不适用或不受支持,文件系统应忽略相应字段。

  • query:指定要提取哪些属性的位掩码。服务器返回的次数不应超过必要的数量。
  • attributes:返回的属性。

此方法需要 Rights.GET_ATTRIBUTES 权限。

请求

名称类型
query NodeAttributesQuery

响应

名称类型
payload Node2_GetAttributes_Result

GetConnectionInfo

获取有关连接的信息。

此方法不需要任何权利。

请求

<EMPTY>

响应

名称类型
payload ConnectionInfo

GetExtendedAttribute

获取与此节点的指定属性 name 相关联的值。

属性名称的长度上限为 MAX_ATTRIBUTE_NAME。系统不会对它们施加任何特定结构。

此方法需要 Rights.GET_ATTRIBUTES 权限。

添加日期:18

请求

名称类型
name ExtendedAttributeName

响应

名称类型
payload Node2_GetExtendedAttribute_Result

GetFlags

获取用于访问此文件的 Directory.Open 权限和标记。

此方法不需要任何权利。

请求

<EMPTY>

响应

名称类型
s zx/Status
flags OpenFlags

ListExtendedAttributes

针对与此节点关联的所有扩展属性名称创建迭代器。如果发生错误,它会在迭代器请求通道上以 epitaph 形式返回,然后该通道将关闭。

GetExtendedAttributes 可与这些名称中的任何一个一起使用,以检索关联的值。

此方法需要 Rights.GET_ATTRIBUTES 权限。

添加日期:18

请求

名称类型
iterator server_end<ExtendedAttributeIterator>

OnOpen

如果 OpenFlags.DESCRIBE 请求,则由 FIDL 服务器紧急生成的事件。

指示打开操作的成功或失败,并且可以选择性地描述对象。如果状态为 ZX_OK,则 info 包含对象的描述性信息(与 Describe 返回的信息相同)。

响应

名称类型
s zx/Status
info NodeInfoDeprecated?

OnRepresentation

NodeFlags.GET_REPRESENTATION 请求且由服务器紧急生成的事件。此事件将是来自服务器的第一条消息,且仅发送一次。

活动变体对应于节点的某个受支持协议,并表示连接时协商的结果。提供辅助句柄(如果适用)。

如果客户端在 Directory.Open 期间在 protocols 中指定多个协议,则 Representation 还会通过其标记传递连接时协商的结果。

这些元素与 NodeProtocolKinds 的成员一对一对应。

这是 fuchsia.unknown/Queryable.Query + 特定协议上固有的 Describe 方法的特殊情况。它作为一项优化存在,以避免额外的往返。

响应

名称类型
payload Representation

查询

请求

<EMPTY>

响应

名称类型
protocol vector<uint8>

QueryFilesystem

查询文件系统,以获取特定于文件系统的信息。

请求

<EMPTY>

响应

名称类型
s zx/Status
info FilesystemInfo?

RemoveExtendedAttribute

移除指定的扩展属性。

如果该属性不存在,则返回 ZX_ERR_NOT_FOUND。

此方法需要 Rights.UPDATE_ATTRIBUTES 权限。

添加日期:18

请求

名称类型
name ExtendedAttributeName

响应

名称类型
payload Node2_RemoveExtendedAttribute_Result

重新标记为营业

创建与同一节点的另一个连接。

请求

名称类型
rights_request RightsRequest
object_request server_end<Node>

SetAttr

更新节点的相关信息。

此方法需要以下权限:OpenFlags.RIGHT_WRITABLE,否则返回 ZX_ERR_BAD_HANDLE

请求

名称类型
flags NodeAttributeFlags
attributes NodeAttributes

响应

名称类型
s zx/Status

SetExtendedAttribute

将此节点的给定属性 name 的值设置为 value

属性名称可能存在,在这种情况下,系统会更新属性。 如果该属性不存在,系统会创建一个。名称中不得包含 null 字节。如果相同,则返回 ZX_ERR_INVALID_ARGS。

此方法需要 Rights.UPDATE_ATTRIBUTES 权限。

添加日期:18

请求

名称类型
name ExtendedAttributeName
value ExtendedAttributeValue
mode SetExtendedAttributeMode

响应

名称类型
payload Node2_SetExtendedAttribute_Result

SetFlags

更改用于访问文件的 Directory.Open 标志。支持可开启 / 关闭的标志:

  • OpenFlags.APPEND

此方法不需要任何权利。

请求

名称类型
flags OpenFlags

响应

名称类型
s zx/Status

同步

将节点的更新同步到底层媒体(如果存在)。

当文件系统服务器已刷新对底层媒体的相关更新时,此方法将返回,但不保证底层媒体已经保留这些信息,也不保证任何信息已提交到硬件。客户端可以使用 Sync 来确保各项操作之间的排序。

此方法不需要任何权利。

请求

<EMPTY>

响应

名称类型
payload Node2_Sync_Result

UpdateAttributes

更新节点的相关信息。

  • attributes,如果 attributes 中存在表字段,则表示意图更新相应属性。

此方法需要 Rights.UPDATE_ATTRIBUTES 权限。

请求

名称类型
payload MutableNodeAttributes

响应

名称类型
payload Node2_UpdateAttributes_Result

Node1

fuchsia.io/node.fidl 中定义

Node 定义了可在文件系统中访问的实体的最小接口。

克隆

创建与同一远程对象的另一个连接。

flags 可以是以下任何一项:

  • OpenFlags.RIGHT_*
  • OpenFlags.APPEND
  • OpenFlags.DESCRIBE
  • OpenFlags.CLONE_SAME_RIGHTS

所有其他标志均会被忽略。

flags 中的 OpenFlags.RIGHT_* 位会请求对生成的克隆对象对应的权限。 克隆对象的权限必须大于或等于原始对象,否则会返回 ZX_ERR_ACCESS_DENIED。 或者,传递 OpenFlags.CLONE_SAME_RIGHTS 以继承针对来源连接的权限。 将任何 OpenFlags.RIGHT_* 标志与 OpenFlags.CLONE_SAME_RIGHTS 一起传递是无效的。

请求

名称类型
flags OpenFlags
object server_end<Node>

GetAttr

获取有关节点的信息。

此方法不需要任何权利。

请求

<EMPTY>

响应

名称类型
s zx/Status
attributes NodeAttributes

GetFlags

获取用于访问此文件的 Directory.Open 权限和标记。

此方法不需要任何权利。

请求

<EMPTY>

响应

名称类型
s zx/Status
flags OpenFlags

OnOpen

如果 OpenFlags.DESCRIBE 请求,则由 FIDL 服务器紧急生成的事件。

指示打开操作的成功或失败,并且可以选择性地描述对象。如果状态为 ZX_OK,则 info 包含对象的描述性信息(与 Describe 返回的信息相同)。

响应

名称类型
s zx/Status
info NodeInfoDeprecated?

QueryFilesystem

查询文件系统,以获取特定于文件系统的信息。

请求

<EMPTY>

响应

名称类型
s zx/Status
info FilesystemInfo?

SetAttr

更新节点的相关信息。

此方法需要以下权限:OpenFlags.RIGHT_WRITABLE,否则返回 ZX_ERR_BAD_HANDLE

请求

名称类型
flags NodeAttributeFlags
attributes NodeAttributes

响应

名称类型
s zx/Status

SetFlags

更改用于访问文件的 Directory.Open 标志。支持可开启 / 关闭的标志:

  • OpenFlags.APPEND

此方法不需要任何权利。

请求

名称类型
flags OpenFlags

响应

名称类型
s zx/Status

Node2

fuchsia.io/node2.fidl 中定义

Node 定义了可在文件系统中访问的实体的最低协议。

关闭

终止连接。

调用 Close 后,客户端不得发送任何其他请求。

服务器在发送状态响应后,无论处于何种状态,都应关闭连接,且不发送简介。

在语义上关闭渠道的客户端应等同于调用 Close,而不知道关闭操作何时完成或其状态。

请求

<EMPTY>

响应

名称类型
payload fuchsia.unknown/Closeable_Close_Result

GetAttributes

获取有关节点的信息。

节点的属性应保持稳定,与用于访问它的特定协议无关。

如果某个属性不适用或不受支持,文件系统应忽略相应字段。

  • query:指定要提取哪些属性的位掩码。服务器返回的次数不应超过必要的数量。
  • attributes:返回的属性。

此方法需要 Rights.GET_ATTRIBUTES 权限。

请求

名称类型
query NodeAttributesQuery

响应

名称类型
payload Node2_GetAttributes_Result

GetConnectionInfo

获取有关连接的信息。

此方法不需要任何权利。

请求

<EMPTY>

响应

名称类型
payload ConnectionInfo

GetExtendedAttribute

获取与此节点的指定属性 name 相关联的值。

属性名称的长度上限为 MAX_ATTRIBUTE_NAME。系统不会对它们施加任何特定结构。

此方法需要 Rights.GET_ATTRIBUTES 权限。

添加日期:18

请求

名称类型
name ExtendedAttributeName

响应

名称类型
payload Node2_GetExtendedAttribute_Result

ListExtendedAttributes

针对与此节点关联的所有扩展属性名称创建迭代器。如果发生错误,它会在迭代器请求通道上以 epitaph 形式返回,然后该通道将关闭。

GetExtendedAttributes 可与这些名称中的任何一个一起使用,以检索关联的值。

此方法需要 Rights.GET_ATTRIBUTES 权限。

添加日期:18

请求

名称类型
iterator server_end<ExtendedAttributeIterator>

OnRepresentation

NodeFlags.GET_REPRESENTATION 请求且由服务器紧急生成的事件。此事件将是来自服务器的第一条消息,且仅发送一次。

活动变体对应于节点的某个受支持协议,并表示连接时协商的结果。提供辅助句柄(如果适用)。

如果客户端在 Directory.Open 期间在 protocols 中指定多个协议,则 Representation 还会通过其标记传递连接时协商的结果。

这些元素与 NodeProtocolKinds 的成员一对一对应。

这是 fuchsia.unknown/Queryable.Query + 特定协议上固有的 Describe 方法的特殊情况。它作为一项优化存在,以避免额外的往返。

响应

名称类型
payload Representation

查询

请求

<EMPTY>

响应

名称类型
protocol vector<uint8>

RemoveExtendedAttribute

移除指定的扩展属性。

如果该属性不存在,则返回 ZX_ERR_NOT_FOUND。

此方法需要 Rights.UPDATE_ATTRIBUTES 权限。

添加日期:18

请求

名称类型
name ExtendedAttributeName

响应

名称类型
payload Node2_RemoveExtendedAttribute_Result

重新标记为营业

创建与同一节点的另一个连接。

请求

名称类型
rights_request RightsRequest
object_request server_end<Node>

SetExtendedAttribute

将此节点的给定属性 name 的值设置为 value

属性名称可能存在,在这种情况下,系统会更新属性。 如果该属性不存在,系统会创建一个。名称中不得包含 null 字节。如果相同,则返回 ZX_ERR_INVALID_ARGS。

此方法需要 Rights.UPDATE_ATTRIBUTES 权限。

添加日期:18

请求

名称类型
name ExtendedAttributeName
value ExtendedAttributeValue
mode SetExtendedAttributeMode

响应

名称类型
payload Node2_SetExtendedAttribute_Result

同步

将节点的更新同步到底层媒体(如果存在)。

当文件系统服务器已刷新对底层媒体的相关更新时,此方法将返回,但不保证底层媒体已经保留这些信息,也不保证任何信息已提交到硬件。客户端可以使用 Sync 来确保各项操作之间的排序。

此方法不需要任何权利。

请求

<EMPTY>

响应

名称类型
payload Node2_Sync_Result

UpdateAttributes

更新节点的相关信息。

  • attributes,如果 attributes 中存在表字段,则表示意图更新相应属性。

此方法需要 Rights.UPDATE_ATTRIBUTES 权限。

请求

名称类型
payload MutableNodeAttributes

响应

名称类型
payload Node2_UpdateAttributes_Result

可打开

fuchsia.io/directory.fidl 中定义

打开

打开与此目录对象相关的新对象。

path 可以包含多个片段(以“/”字符分隔),且不得为空;即“”是无效路径。尾随斜杠表示 OpenFlags.DIRECTORY。组件不能为空(即“foo//bar”无效)。路径中的任何位置都不允许使用“..”。仅当路径为“.”时才允许使用“.”,其他情况则不行。允许前导“/”(与不存在时的处理方式相同,即“/foo/bar”和“foo/bar”相同)。

如果针对标志发送的未知值,应关闭连接。

flags 中提供的 OpenFlags.RIGHT_* 标志将限制对将与已打开实体相关联的 object 频道的访问权限。

权限从未增加。打开目录中的嵌套实体时,您只能请求与目录连接相同的权限或其中一部分权限。超出这些权限会导致系统将在 OnOpen 事件中传输“访问遭拒”错误(如果适用),并关闭 object 连接。

系统会忽略 mode

添加数量:12

请求

名称类型
flags OpenFlags
mode ModeType
path string[4095]
object server_end<Node>

清晰可辨

fuchsia.io/file2.fidl 中定义

立即查阅

在跳转偏移量处最多读取到 'count' 个字节。 跳转偏移量按读取的字节数向前移动。

不变量

  • 返回的 data.length 绝不会大于 count
  • 如果 data.length 小于 count,则表示跳转偏移量在此操作过程中已到达文件末尾。
  • 如果 data.length 为零,而 count 不为 0,则表示跳转偏移量已位于或超出文件末尾,且无法读取任何数据。
  • 如果 count 为零,服务器应执行所有检查以确保能进行读取而不实际读取任何内容,并返回空的 data 矢量。

此方法需要 Rights.READ_BYTES 权限。

如果 count 大于 MAX_TRANSFER_SIZE,则返回 ZX_ERR_OUT_OF_RANGE

请求

名称类型
count uint64

响应

名称类型
payload Readable_Read_Result

fuchsia.io/symlink.fidl 中定义

一个 ['Node'],包含一个符号链接。

添加日期:18

克隆

创建与同一远程对象的另一个连接。

flags 可以是以下任何一项:

  • OpenFlags.RIGHT_*
  • OpenFlags.APPEND
  • OpenFlags.DESCRIBE
  • OpenFlags.CLONE_SAME_RIGHTS

所有其他标志均会被忽略。

flags 中的 OpenFlags.RIGHT_* 位会请求对生成的克隆对象对应的权限。 克隆对象的权限必须大于或等于原始对象,否则会返回 ZX_ERR_ACCESS_DENIED。 或者,传递 OpenFlags.CLONE_SAME_RIGHTS 以继承针对来源连接的权限。 将任何 OpenFlags.RIGHT_* 标志与 OpenFlags.CLONE_SAME_RIGHTS 一起传递是无效的。

请求

名称类型
flags OpenFlags
object server_end<Node>

关闭

终止连接。

调用 Close 后,客户端不得发送任何其他请求。

服务器在发送状态响应后,无论处于何种状态,都应关闭连接,且不发送简介。

在语义上关闭渠道的客户端应等同于调用 Close,而不知道关闭操作何时完成或其状态。

请求

<EMPTY>

响应

名称类型
payload fuchsia.unknown/Closeable_Close_Result

描述

请求

<EMPTY>

响应

名称类型
payload Symlink_Describe_Result

GetAttr

获取有关节点的信息。

此方法不需要任何权利。

请求

<EMPTY>

响应

名称类型
s zx/Status
attributes NodeAttributes

GetAttributes

获取有关节点的信息。

节点的属性应保持稳定,与用于访问它的特定协议无关。

如果某个属性不适用或不受支持,文件系统应忽略相应字段。

  • query:指定要提取哪些属性的位掩码。服务器返回的次数不应超过必要的数量。
  • attributes:返回的属性。

此方法需要 Rights.GET_ATTRIBUTES 权限。

请求

名称类型
query NodeAttributesQuery

响应

名称类型
payload Node2_GetAttributes_Result

GetConnectionInfo

获取有关连接的信息。

此方法不需要任何权利。

请求

<EMPTY>

响应

名称类型
payload ConnectionInfo

GetExtendedAttribute

获取与此节点的指定属性 name 相关联的值。

属性名称的长度上限为 MAX_ATTRIBUTE_NAME。系统不会对它们施加任何特定结构。

此方法需要 Rights.GET_ATTRIBUTES 权限。

添加日期:18

请求

名称类型
name ExtendedAttributeName

响应

名称类型
payload Node2_GetExtendedAttribute_Result

GetFlags

获取用于访问此文件的 Directory.Open 权限和标记。

此方法不需要任何权利。

请求

<EMPTY>

响应

名称类型
s zx/Status
flags OpenFlags

LinkInto

在由 dst_parent_token 表示的目录中创建一个名为 dst 的此对象的链接。

dst 必须是已解析的对象名称。在字符串中包含“/”将返回 ZX_ERR_INVALID_ARGS

使用此方法时,您只需要文件系统支持对此对象最多拥有一组权限。 对于文件,通常为 Rights.READ_BYTESRights.WRITE_BYTESRights.GET_ATTRIBUTESRights.UPDATE_ATTRIBUTES。某些文件系统可能也支持 Rights.EXECUTE 权限。权限不足将导致 ZX_ERR_ACCESS_DENIED

如果此对象没有任何链接,则会失败并显示 ZX_ERR_NOT_FOUND

此方法具有 Directory::Link 方法的原子性属性,这意味着先调用 Open 后调用 LinkInto 并不等同于先调用 Directory::Link,因为 LinkInto 不会阻止来源被重命名或解除关联。

请求

名称类型
dst_parent_token Token
dst Name

响应

名称类型
payload Linkable_LinkInto_Result

ListExtendedAttributes

针对与此节点关联的所有扩展属性名称创建迭代器。如果发生错误,它会在迭代器请求通道上以 epitaph 形式返回,然后该通道将关闭。

GetExtendedAttributes 可与这些名称中的任何一个一起使用,以检索关联的值。

此方法需要 Rights.GET_ATTRIBUTES 权限。

添加日期:18

请求

名称类型
iterator server_end<ExtendedAttributeIterator>

OnOpen

如果 OpenFlags.DESCRIBE 请求,则由 FIDL 服务器紧急生成的事件。

指示打开操作的成功或失败,并且可以选择性地描述对象。如果状态为 ZX_OK,则 info 包含对象的描述性信息(与 Describe 返回的信息相同)。

响应

名称类型
s zx/Status
info NodeInfoDeprecated?

OnRepresentation

NodeFlags.GET_REPRESENTATION 请求且由服务器紧急生成的事件。此事件将是来自服务器的第一条消息,且仅发送一次。

活动变体对应于节点的某个受支持协议,并表示连接时协商的结果。提供辅助句柄(如果适用)。

如果客户端在 Directory.Open 期间在 protocols 中指定多个协议,则 Representation 还会通过其标记传递连接时协商的结果。

这些元素与 NodeProtocolKinds 的成员一对一对应。

这是 fuchsia.unknown/Queryable.Query + 特定协议上固有的 Describe 方法的特殊情况。它作为一项优化存在,以避免额外的往返。

响应

名称类型
payload Representation

查询

请求

<EMPTY>

响应

名称类型
protocol vector<uint8>

QueryFilesystem

查询文件系统,以获取特定于文件系统的信息。

请求

<EMPTY>

响应

名称类型
s zx/Status
info FilesystemInfo?

RemoveExtendedAttribute

移除指定的扩展属性。

如果该属性不存在,则返回 ZX_ERR_NOT_FOUND。

此方法需要 Rights.UPDATE_ATTRIBUTES 权限。

添加日期:18

请求

名称类型
name ExtendedAttributeName

响应

名称类型
payload Node2_RemoveExtendedAttribute_Result

重新标记为营业

创建与同一节点的另一个连接。

请求

名称类型
rights_request RightsRequest
object_request server_end<Node>

SetAttr

更新节点的相关信息。

此方法需要以下权限:OpenFlags.RIGHT_WRITABLE,否则返回 ZX_ERR_BAD_HANDLE

请求

名称类型
flags NodeAttributeFlags
attributes NodeAttributes

响应

名称类型
s zx/Status

SetExtendedAttribute

将此节点的给定属性 name 的值设置为 value

属性名称可能存在,在这种情况下,系统会更新属性。 如果该属性不存在,系统会创建一个。名称中不得包含 null 字节。如果相同,则返回 ZX_ERR_INVALID_ARGS。

此方法需要 Rights.UPDATE_ATTRIBUTES 权限。

添加日期:18

请求

名称类型
name ExtendedAttributeName
value ExtendedAttributeValue
mode SetExtendedAttributeMode

响应

名称类型
payload Node2_SetExtendedAttribute_Result

SetFlags

更改用于访问文件的 Directory.Open 标志。支持可开启 / 关闭的标志:

  • OpenFlags.APPEND

此方法不需要任何权利。

请求

名称类型
flags OpenFlags

响应

名称类型
s zx/Status

同步

将节点的更新同步到底层媒体(如果存在)。

当文件系统服务器已刷新对底层媒体的相关更新时,此方法将返回,但不保证底层媒体已经保留这些信息,也不保证任何信息已提交到硬件。客户端可以使用 Sync 来确保各项操作之间的排序。

此方法不需要任何权利。

请求

<EMPTY>

响应

名称类型
payload Node2_Sync_Result

UpdateAttributes

更新节点的相关信息。

  • attributes,如果 attributes 中存在表字段,则表示意图更新相应属性。

此方法需要 Rights.UPDATE_ATTRIBUTES 权限。

请求

名称类型
payload MutableNodeAttributes

响应

名称类型
payload Node2_UpdateAttributes_Result

可写入

fuchsia.io/file2.fidl 中定义

写入

按跳转偏移量写入数据。 跳转偏移量按写入的字节数向前移动。如果文件处于附加模式,则跳转偏移量首先设置为文件末尾,然后是一个原子步骤,然后写入。

如果跳转偏移量加上 data.length 超出文件当前末尾,则文件大小可能会增大。

  • 请求 data 字节缓冲区以写入文件。
  • 响应 actual_count 写入的字节数。

不变量

  • 返回的 actual_count 绝不会大于 data.length
  • 如果服务器因空间不足而无法写入所有数据,则 actual_count 可能会小于 data.length。如果没有可写入的字节,则返回错误。
  • 如果 data.length 为零,服务器应执行所有检查以确保在不改变文件的情况下进行写入访问,并返回零字节的成功写入。在附加模式下,跳转偏移量仍会更新。

此方法需要 Rights.WRITE_BYTES 权限。

请求

名称类型
data Transfer

响应

名称类型
payload Writable_Write_Result

结构

AdvisoryLockRange

fuchsia.io/locking.fidl 中定义

野战类型说明默认
origin SeekOrigin

文件中计算 offset 的位置。

无默认取景方式
offset int64

字节范围的开头,表示为到 origin 的偏移量。 如果 originSeekOrigin.START,则不能为负数。

无默认取景方式
length int64

字节范围的长度(以字节为单位)。

如果长度为零,则无论文件有多大,字节范围都会一直延伸到文件末尾。

如果长度为负数,则字节范围包括字节 offset + length,最多包含 offset - 1,前提是此范围不超出文件开头。

无默认取景方式

AdvisoryLocking_AdvisoryLock_Response

fuchsia.io/locking.fidl 中定义

<EMPTY>

fuchsia.io/directory2.fidl 中定义

<EMPTY>

Directory2_Rename_Response

fuchsia.io/directory2.fidl 中定义

<EMPTY>

fuchsia.io/directory2.fidl 中定义

<EMPTY>

DirectoryIterator_GetNext_Response

fuchsia.io/directory2.fidl 中定义

野战类型说明默认
entries vector<DirectoryEntry>[8192]

目录的直接子节点的相关信息。

如果某个属性不适用或不受支持,实现应留空相应字段。

无默认取景方式

DirectoryObject

fuchsia.io/node.fidl 中定义

<EMPTY>

ExtendedAttributeIterator_GetNext_Response

fuchsia.io/node2.fidl 中定义

野战类型说明默认
attributes vector<vector<uint8>>[128] 无默认取景方式
last bool 无默认取景方式

FileObject 资源

fuchsia.io/node.fidl 中定义

野战类型说明默认
event handle<event>?

此为可选事件,用于传输与对象的可读性或可写性相关的信息。此事件将中继有关底层对象(而非授予客户端的功能)的信息:此事件可能会在没有读取功能的连接上被标记为“可读取”。

可以观察到此事件的“FILE_SIGNAL_”值。

无默认取景方式
stream handle<stream>?

用于未来数据流支持的占位符。

目前,服务器不得在此字段发送标识名。

无默认取景方式

File_Allocate_Response

fuchsia.io/file2.fidl 中定义

<EMPTY>

File_EnableVerity_Response

fuchsia.io/file2.fidl 中定义

<EMPTY>

File_GetBackingMemory_Response 资源

fuchsia.io/file2.fidl 中定义

野战类型说明默认
vmo handle<vmo> 无默认取景方式

File_ReadAt_Response

fuchsia.io/file2.fidl 中定义

野战类型说明默认
data Transfer 无默认取景方式

File_Resize_Response

fuchsia.io/file2.fidl 中定义

<EMPTY>

File_Seek_Response

fuchsia.io/file2.fidl 中定义

野战类型说明默认
offset_from_start uint64 无默认取景方式

File_WriteAt_Response

fuchsia.io/file2.fidl 中定义

野战类型说明默认
actual_count uint64 无默认取景方式

FilesystemInfo

fuchsia.io/node.fidl 中定义

野战类型说明默认
total_bytes uint64

可存储在文件系统中的数据字节数。这不计入元数据或其他文件系统开销(如块舍入)。

无默认取景方式
used_bytes uint64

文件系统正在使用的数据字节数。这不计入元数据或其他文件系统开销(如块舍入)。

无默认取景方式
total_nodes uint64

可存储在文件系统中的节点数。

无默认取景方式
used_nodes uint64

文件系统使用的节点数。

无默认取景方式
free_shared_pool_bytes uint64

可从底层卷管理器分配的额外空间量。如果不受支持或文件系统没有空间进行扩展,此值将为 0。

无默认取景方式
fs_id uint64

此文件系统实例的唯一标识符。不会在重新启动后保留。

实现人员应创建一个内核对象(通常是事件),并将其 koid 用作文件系统 ID。此 koid 可保证系统中的唯一性。

无默认取景方式
block_size uint32

单个文件系统块的大小(以字节为单位)。

无默认取景方式
max_filename_size uint32

文件系统名称的最大长度。

无默认取景方式
fs_type uint32

底层文件系统类型的唯一标识符。

无默认取景方式
padding uint32 无默认取景方式
name int8[32] 无默认取景方式

Linkable_LinkInto_Response

fuchsia.io/node2.fidl 中定义

<EMPTY>

Node2_RemoveExtendedAttribute_Response

fuchsia.io/node2.fidl 中定义

<EMPTY>

Node2_SetExtendedAttribute_Response

fuchsia.io/node2.fidl 中定义

<EMPTY>

Node2_Sync_Response

fuchsia.io/node2.fidl 中定义

<EMPTY>

Node2_UpdateAttributes_Response

fuchsia.io/node2.fidl 中定义

<EMPTY>

NodeAttributes

fuchsia.io/node.fidl 中定义

NodeAttributes 定义有关文件系统节点的通用信息。

野战类型说明默认
mode uint32

“mode”中描述了保护位和节点类型信息。

无默认取景方式
id uint64

文件系统唯一 ID。

无默认取景方式
content_size uint64

节点大小(以字节为单位)。

无默认取景方式
storage_size uint64

存储节点所需的空间(可能大于大小),以字节为单位。

无默认取景方式
creation_time uint64

创建时间(可在创建后手动更新),以自 Unix 纪元、世界协调时间 (UTC) 开始的毫秒数表示。

无默认取景方式
modification_time uint64

最后一次修改时间,以自 Unix 纪元、UTC 以来的纳秒为单位。

无默认取景方式

NodeAttributes2

fuchsia.io/node2.fidl 中定义

野战类型说明默认
mutable_attributes MutableNodeAttributes 无默认取景方式
immutable_attributes ImmutableNodeAttributes 无默认取景方式

Readable_Read_Response

fuchsia.io/file2.fidl 中定义

野战类型说明默认
data Transfer 无默认取景方式

服务

fuchsia.io/node.fidl 中定义

<EMPTY>

SymlinkObject

fuchsia.io/node.fidl 中定义

野战类型说明默认
target SymlinkTarget 无默认取景方式

Writable_Write_Response

fuchsia.io/file2.fidl 中定义

野战类型说明默认
actual_count uint64 无默认取景方式

枚举

AdvisoryLockType 严格

类型:uint32

fuchsia.io/locking.fidl 中定义

名称说明
1

零个或多个连接可以同时持有文件的读取锁。

2

对于一个文件,最多只能有一个连接同时持有写入锁。当某个文件持有写入锁时,该文件不能持有其他类型的锁。

3

区域指定了要解锁的区域。

CreationMode 严格

类型:uint32

fuchsia.io/directory2.fidl 中定义

名称说明
0

仅打开现有对象,不要创建新对象。

1
已弃用:19
2

如果对象不存在,请创建一个新对象,否则打开现有对象。

3

如果不存在,请创建一个新对象,否则请求将失败并显示 ZX_ERR_ALREADY_EXISTS

DirentType strict

类型:uint8

fuchsia.io/directory.fidl 中定义

名称说明
0

类型未知的脏污。

4

表示目录对象的 dirent。

6

表示块存储设备对象的 dirent。

8

表示文件对象的 dirent。

16

表示服务对象的 dirent。

HashAlgorithm 灵活

类型:uint8

fuchsia.io/file2.fidl 中定义

表示用于为启用了 fsverity 的文件构建 Merkle 树的哈希算法。

添加了:HEAD

名称说明
1
2

SeekOrigin 严格

类型:uint32

fuchsia.io/file2.fidl 中定义

用于更新跳转偏移量的参照点。请参阅 File.Seek

此枚举与 zx_stream_seek_origin_t 枚举匹配。

名称说明
0

从文件开头跳转。 跳转偏移量将设置为 offset 字节。在这种情况下,跳转偏移量不能为负数。

1

从文件的当前位置跳转。 跳转偏移量将是当前跳转偏移量加上 offset 字节。

2

从文件末尾跳转。 跳转偏移量为文件大小加 offset 字节。

SetExtendedAttributeMode 严格

类型:uint32

fuchsia.io/node2.fidl 中定义

名称说明
1

设置扩展属性的值,无论其是否已存在。

2

创建一个新的扩展属性。如果已存在,则失败。

3

替换现有扩展属性的值。如果不存在,则失败。

WatchEvent 严格

类型:uint8

fuchsia.io/directory.fidl 中定义

名称说明
0

表示所监控的目录已被删除。针对此事件返回的名称将为 .(点),因为它引用了目录本身。

1

表示已在目录中创建(新增或移动)节点。

2

标识已从目录中移除(已删除或移动)的节点。

3

标识在监控启动时目录中已存在的节点。

4

标识不再发送任何 EXISTING 事件。为此事件返回的名称将为空,因为它并非指特定条目。

AdvisoryLockRequest

fuchsia.io/locking.fidl 中定义

序数野战类型说明
type AdvisoryLockType

要获取的锁定类型。

如果此字段不存在,AdvisoryLock 方法将失败,并显示 ZX_ERR_INVALID_ARGS。

range AdvisoryLockRange

要锁定的文件中的字节范围。

范围可以超出文件末尾,但不能超出文件开头。

如果没有此字段,则范围默认为整个文件。

wait bool

文件是否应等待响应 AdvisoryLock 方法,直到可以获取请求的锁。

如果缺少此字段,文件将不会等待。

ConnectionInfo 资源

fuchsia.io/node2.fidl 中定义

序数野战类型说明
rights Rights

当前连接拥有的权利。注意:rights 限制了对连接允许的操作集,但不保证它们的可用性。例如,某个文件可能在某个文件连接上拥有 Rights.EXECUTE 权限,但文件本身没有 EXECUTE 功能,因此无法执行。请参阅 ConnectionOptions.rights

ConnectorInfo

fuchsia.io/node2.fidl 中定义

序数野战类型说明
attributes NodeAttributes2

请求的对象属性。此字段仅在请求时填充。

添加日期:18

DirectoryEntry

fuchsia.io/directory2.fidl 中定义

序数野战类型说明
name Name

节点名称。此字段必须存在。

protocols NodeProtocolKinds

描述节点支持的表示法类型。

abilities Abilities

描述节点支持的操作类型。

id Id

节点的 ID。请参阅 Id。 此 id 在一个目录的所有条目中应该是唯一的。

DirectoryEnumerateOptions

fuchsia.io/directory2.fidl 中定义

序数野战类型说明

DirectoryInfo

fuchsia.io/directory2.fidl 中定义

序数野战类型说明
attributes NodeAttributes2

所请求的目录属性。此字段仅在请求时填充。

添加日期:18

DirectoryProtocolOptions

fuchsia.io/directory2.fidl 中定义

序数野战类型说明
optional_rights Rights

待协商的可选权利。

如果存在,则表示调用方请求额外的可选权限,这些权利等于此值与请求连接的权限的交集。由于此请求是通过多个跃点代理的,因此可作为高水准来阻止权限升级;在进行代理之前,每个代理都必须将该值与所请求连接的权限相交。

在表达 POSIX 语义时,此字段是必要的,目录的 open 必须为 O_RDONLY,而 openat 可用于打开该目录中权限超过 O_RDONLY 的非目录节点。这意味着,POSIX 客户端必须始终将此项设置为一整套权限,以实现不禁止目录的 openopenat 调用(例如,O_WRONLYO_RDWR 禁止访问目录)。

FileInfo 资源

fuchsia.io/file2.fidl 中定义

节点的文件表示形式的辅助数据。

序数野战类型说明
is_append bool

如果文件在附加模式下打开,则为 true。 在附加模式下,跳转偏移量在每次写入之前移至末尾,这两个步骤以原子方式执行。

observer handle<event>

此为可选事件,用于传输与对象的可读性或可写性相关的信息。此事件将中继有关底层对象(而非授予客户端的功能)的信息:此事件可能会在没有读取功能的连接上被标记为“可读”。

如果满足以下条件,此事件就会显示:

  • 文件连接上的 available_operations 不为空。
  • 文件系统支持发送可读/可写性事件信号。

可以在此事件中观察到 FileSignal 值。

stream handle<stream>

可选的流对象,可用于对文件执行读写操作。

与使用 File 协议中的读取和写入操作读取和写入文件相比,使用流对象读取和写入文件的速度最高可达到 20 倍。

attributes NodeAttributes2

请求的文件属性。此字段仅在请求时填充。

添加日期:18

ImmutableNodeAttributes

fuchsia.io/node2.fidl 中定义

序数野战类型说明
protocols NodeProtocolKinds

描述节点支持的表示法类型。注意:这不是连接时间协商的结果,连接时间协商通过 representation 传达。

abilities Abilities

描述节点支持的操作类型。注意:这与关联时使用的权利不同。

content_size uint64

节点大小(以字节为单位)。

storage_size uint64

存储节点所需的空间(可能大于节点大小)(以字节为单位)。

id Id

节点的 ID。请参阅 Id。 此 id 在一个目录的所有条目中应该是唯一的。

change_time uint64

自 Unix 纪元(世界协调时间)以来对元数据的上次更改时间(以纳秒为单位)。

添加了:HEAD
options VerificationOptions

包含针对已启用 verity 的文件的验证选项。

添加了:HEAD
root_hash vector<uint8>[64]

文件的根哈希值。并非所有文件系统都支持在所有文件中执行此操作。

添加了:HEAD
verity_enabled bool

如果此文件启用了 verity,则为 true。

添加了:HEAD

MutableNodeAttributes

fuchsia.io/node2.fidl 中定义

序数野战类型说明
creation_time uint64

自 Unix 纪元(世界协调时间)以来的创建时间,以纳秒为单位。

modification_time uint64

自 Unix 纪元(世界协调时间)以来的最后一次修改时间,以纳秒为单位。

mode uint32

POSIX 兼容性属性。大多数文件系统都不支持这些格式。执行解析操作必须直接存储和检索它们(例如,作为扩展属性),而不应尝试解析它们(例如,通过特别执行权限检查或处理设备打开情况)。

添加日期:18
uid uint32
添加日期:18
gid uint32
添加日期:18
rdev uint64
添加日期:18
access_time uint64

上次访问时间,以自 Unix 纪元(世界协调时间)以来的纳秒为单位。请注意,如果这是唯一一个要更新的属性,则服务器可能不会总是更新此属性。

添加日期:18

NodeOptions

fuchsia.io/directory2.fidl 中定义

打开节点时使用的选项。

序数野战类型说明
flags NodeFlags
protocols NodeProtocols

调用方可以通过设置与预期类型对应的协议来断言对象的类型:

  • 如果调用方需要一个目录,但节点无法作为目录访问,则错误为 ZX_ERR_NOT_DIR

  • 如果调用方需要一个文件,但节点无法作为文件访问,则错误为 ZX_ERR_NOT_FILE

  • 在其他不匹配的情况下,对于空表,错误为 ZX_ERR_WRONG_TYPE

如果存在多个协议,则最终协议可能会成为其中任何一个。调用方应指定 NodeFlags.GET_REPRESENTATION 以接收 Node.OnRepresentation 事件,以确定协议。

如果不存在,则表示调用方接受任何 Node 协议(例如,对于连接器节点,包括 Node 本身)。

mode CreationMode

指定应如何创建目标对象。如果要创建对象,则必须通过 protocols 指定其类型。检查是否存在以及是否创建新对象是以原子方式执行的。

如果类型不明确(例如同时设置了 directoryfile),请求必须失败并返回 ZX_ERR_INVALID_ARGS

添加数量:19
rights Rights

已请求对新连接的权限。如果任何权利超出当前连接的权限,object_request 将使用 ZX_ERR_ACCESS_DENIED 关闭。

授予连接的权限将缩小到目标节点类型支持的操作。例如,如果目标节点是一个文件,并且同时请求了 Rights.WRITE_BYTESRights.MODIFY_DIRECTORY,则生成的连接只会被授予 Rights.WRITE_BYTES

attributes NodeAttributesQuery

如果已设置 NodeFlags.GET_REPRESENTATION 标志,则要在 Node.OnRepresentation 中返回属性。这需要父级连接上有 Rights.GET_ATTRIBUTES,但在生成的连接上则不需要。

添加日期:18
create_attributes MutableNodeAttributes

如果要创建对象,此字段会指定在创建时应与对象一起存储的属性。服务器可能不支持设置任何或所有属性,在这种情况下,它们将返回 ZX_ERR_NOT_SUPPORTED

添加日期:18

NodeProtocols

fuchsia.io/directory2.fidl 中定义

序数野战类型说明
directory DirectoryProtocolOptions
file FileProtocolFlags
node NodeProtocolFlags

请求节点协议。唯一支持的是 Rights.GET_ATTRIBUTES。对生成的连接调用 SetFlags 将生成 ZX_ERR_BAD_HANDLE。如果指定了 NodeFlags.GET_REPRESENTATION,则返回 connector 变体(即使对象支持其他表示法)。

添加日期:18

RightsRequest

fuchsia.io/node2.fidl 中定义

序数野战类型说明
rights Rights

已请求对新连接的权限。

如果 rights 超出了发出请求的连接的权限,则 object_request 将以 ZX_ERR_ACCESS_DENIED epitaph 结束。

如果不存在,则继承发出请求的连接的权限。

SymlinkInfo

fuchsia.io/symlink.fidl 中定义

添加日期:18

序数野战类型说明
target SymlinkTarget

符号链接在服务器上没有意义;客户端可以随意解释其选择的目标。

attributes NodeAttributes2

为符号链接请求的属性。此字段仅在请求时填充。

UnlinkOptions

fuchsia.io/directory2.fidl 中定义

序数野战类型说明
flags UnlinkFlags

VerificationOptions

fuchsia.io/file2.fidl 中定义

用于为文件启用 verity 的一组选项。

添加了:HEAD

序数野战类型说明
hash_algorithm HashAlgorithm
salt vector<uint8>[32]

在进行哈希处理之前,每个块都会添加 salt 前缀。

联合

AdvisoryLocking_AdvisoryLock_Result 严格

fuchsia.io/locking.fidl 中定义

序数变体类型说明
response AdvisoryLocking_AdvisoryLock_Response
err zx/Status

ConnectionProtocols 灵活

fuchsia.io/directory2.fidl 中定义

序数变体类型说明
connector ConnectorFlags

请求在连接上提供节点的底层协议。

node NodeOptions

请求在连接上提供底层 Node 协议。

fuchsia.io/directory2.fidl 中定义

序数变体类型说明

Directory2_Rename_Result 严格

fuchsia.io/directory2.fidl 中定义

序数变体类型说明
response Directory2_Rename_Response
err zx/Status

fuchsia.io/directory2.fidl 中定义

序数变体类型说明

DirectoryIterator_GetNext_Result 严格

fuchsia.io/directory2.fidl 中定义

序数变体类型说明
response DirectoryIterator_GetNext_Response
err zx/Status

ExtendedAttributeIterator_GetNext_Result 严格

fuchsia.io/node2.fidl 中定义

序数变体类型说明
response ExtendedAttributeIterator_GetNext_Response
err zx/Status

ExtendedAttributeValue 严格 资源

fuchsia.io/node2.fidl 中定义

扩展属性的值类型。如果值小于 32768 字节,则以内嵌方式包含该值。大于此大小的值会被写入 vmo 缓冲区。

添加日期:18
序数变体类型说明
bytes vector<uint8>[32768]
buffer handle<vmo>

File_Allocate_Result 严格

fuchsia.io/file2.fidl 中定义

序数变体类型说明
response File_Allocate_Response
err zx/Status

File_EnableVerity_Result 严格

fuchsia.io/file2.fidl 中定义

序数变体类型说明
response File_EnableVerity_Response
err zx/Status

File_GetBackingMemory_Result strict 资源

fuchsia.io/file2.fidl 中定义

序数变体类型说明
response File_GetBackingMemory_Response
err zx/Status

File_ReadAt_Result 严格

fuchsia.io/file2.fidl 中定义

序数变体类型说明
response File_ReadAt_Response
err zx/Status

File_Resize_Result 严格

fuchsia.io/file2.fidl 中定义

序数变体类型说明
response File_Resize_Response
err zx/Status

File_Seek_Result 严格

fuchsia.io/file2.fidl 中定义

序数变体类型说明
response File_Seek_Response
err zx/Status

File_WriteAt_Result 严格

fuchsia.io/file2.fidl 中定义

序数变体类型说明
response File_WriteAt_Response
err zx/Status

Linkable_LinkInto_Result 严格

fuchsia.io/node2.fidl 中定义

序数变体类型说明
response Linkable_LinkInto_Response
err zx/Status

Node2_GetAttributes_Result 严格

fuchsia.io/node2.fidl 中定义

序数变体类型说明
response NodeAttributes2
err zx/Status

Node2_GetExtendedAttribute_Result strict 资源

fuchsia.io/node2.fidl 中定义

序数变体类型说明
response ExtendedAttributeValue
err zx/Status

Node2_RemoveExtendedAttribute_Result 严格

fuchsia.io/node2.fidl 中定义

序数变体类型说明
response Node2_RemoveExtendedAttribute_Response
err zx/Status

Node2_SetExtendedAttribute_Result 严格

fuchsia.io/node2.fidl 中定义

序数变体类型说明
response Node2_SetExtendedAttribute_Response
err zx/Status

Node2_Sync_Result 严格

fuchsia.io/node2.fidl 中定义

序数变体类型说明
response Node2_Sync_Response
err zx/Status

Node2_UpdateAttributes_Result 严格

fuchsia.io/node2.fidl 中定义

序数变体类型说明
response Node2_UpdateAttributes_Response
err zx/Status

NodeInfo 已弃用的严格 资源

fuchsia.io/node.fidl 中定义

序数变体类型说明
service Service

连接未提供协议信息。

file FileObject

连接组成 File

directory DirectoryObject

连接构成 Directory

Readable_Read_Result 严格

fuchsia.io/file2.fidl 中定义

序数变体类型说明
response Readable_Read_Response
err zx/Status

表示灵活 资源

fuchsia.io/node2.fidl 中定义

序数变体类型说明
connector ConnectorInfo

节点的连接器表示形式的辅助数据,用于发现和连接协议。

它支持连接到文件系统服务器在某个路径下导出的任意协议,包括不构成 Node2 的协议。

请参阅 NodeProtocolKinds.CONNECTOR

directory DirectoryInfo

节点目录表示形式的辅助数据。在表示法中选择此变体意味着连接使用目录协议。

请参阅 NodeProtocolKinds.DIRECTORY

file FileInfo

节点的文件表示形式的辅助数据。在表示法中选择此变体意味着连接使用文件协议。

请参阅 NodeProtocolKinds.FILE

fuchsia.io/symlink.fidl 中定义

序数变体类型说明

Writable_Write_Result 严格

fuchsia.io/file2.fidl 中定义

序数变体类型说明
response Writable_Write_Response
err zx/Status

BITS

AllocateMode 灵活

类型:uint32

fuchsia.io/file2.fidl 中定义

名称说明
1
2
4
8
16
32

ConnectorFlags flexible

类型:uint64

fuchsia.io/directory2.fidl 中定义

名称说明

FileProtocolFlags灵活

类型:uint64

fuchsia.io/directory2.fidl 中定义

名称说明
1

以附加模式打开文件,即每次写入之前,连接都应查找到文件末尾。

如果文件不支持附加,应生成 ZX_ERR_NOT_SUPPORTED 书写。目前,只有 NodeProtocolKinds.FILE 连接支持附加。

2

在使用前将对象截断,方法是将其长度设置为 0。要求在连接上直接拥有 Rights.WRITE_BYTES

如果文件不支持截断,则应生成 ZX_ERR_NOT_SUPPORTED 署名。

FileSignal 严格

类型:uint32

fuchsia.io/file2.fidl 中定义

名称说明
16777216

表示文件已准备好进行读取。

33554432

表示文件已准备好写入。

ModeType 严格

类型:uint32

fuchsia.io/directory.fidl 中定义

名称说明
2147483648

NodeAttributeFlags 严格

类型:uint32

fuchsia.io/node.fidl 中定义

用于更新节点的“attributes”字段由“flags”参数指示。

名称说明
1
2

NodeAttributesQuery 严格

类型:uint64

fuchsia.io/node2.fidl 中定义

名称说明
1

请求 NodeAttributes.protocols

2

请求 NodeAttributes.abilities

4

请求 NodeAttributes.content_size

8

请求 NodeAttributes.storage_size

32

请求 NodeAttributes.id

64

请求 NodeAttributes.creation_time

128

请求 NodeAttributes.modification_time

256

Posix 属性。

添加日期:18
512
添加日期:18
1024
添加日期:18
2048
添加日期:18
4096
添加日期:18
8192
添加日期:18
16384

Verity 属性。

添加了:HEAD
32768
添加了:HEAD
65536
添加了:HEAD

NodeFlags 柔性

类型:uint64

fuchsia.io/directory2.fidl 中定义

名称说明
1

请求将 Node.OnRepresentation 事件作为协议请求中的第一条消息发送。

这是 fuchsia.unknown/Queryable.Query + 特定协议上固有的 Describe 方法的特殊情况。它作为一项优化存在,以避免额外的往返。

NodeProtocolFlags 柔性

类型:uint64

fuchsia.io/directory2.fidl 中定义

名称说明
1

仅当底层对象是目录时,才允许连接。如果尝试打开除目录之外的其他内容,则将导致 ZX_ERR_NOT_DIR 书写。

NodeProtocolKinds 灵活

类型:uint64

fuchsia.io/node-protocols.fidl 中定义

打开节点时,它可以有多种受支持的表示法,即使它可能具有固定的基础身份也是如此。

目前,文件通过 File 协议访问,并在使用 GET_REPRESENTATION 打开时发送 Representation.FileInfo。不过,将来我们可能会引入更复杂的 FileV2 协议,或者由专用内核对象支持的更高效的 SuperFastFile。新客户端可以通过在 NodeProtocolKinds 中指定相应位来请求更高级的表示法,而现有客户端将通过旧表示法继续与节点通信。

NodeProtocolKinds 通过协议协商的形式实现向前兼容性。

这些元素与 Representation 的成员具有一对一的对应关系。

名称说明
1

节点的连接器表示法。

连接将读出节点或目标协议,具体取决于打开期间使用的标志。

2

节点的目录表示法。

连接将说出 Directory 协议。

4

节点的文件表示形式。

连接将说出 File 协议。

OpenFlags 严格

类型:uint32

fuchsia.io/directory.fidl 中定义

名称说明
1

可以从目标对象读取数据。

2

可以写入目标对象。

8

连接可以映射目标对象可执行文件。

65536

如果该对象不存在,请创建一个。

131072

(使用 Create)如果对象已存在,则失败。

262144

在使用前截断对象。

524288

断言要打开的对象是一个目录。 如果目标对象不是目录,则返回错误。

1048576

在所有写入之前,跳转至对象末尾。

4194304

打开对对象(而不是对象本身)的引用。 将以下标志与 NODE_REFERENCE 一起传递才有效:

  • DIRECTORY
  • NOT_DIRECTORY
  • DESCRIBE,否则会返回错误。如果使用此方法打开或克隆对象,生成的连接不会携带任何权限标志。 生成的连接允许执行有限的一组操作:GetAttrCloneCloseDescribeGetFlags。连接将采用 Node 协议。调用 SetAttrSetFlags 将导致 ZX_ERR_BAD_HANDLE
8388608

请求向接口请求发送“OnOpen”事件。

如果打开/克隆成功,该事件将包含一个非 null NodeInfoDeprecated。这可用于打开不构成 fuchsia.io/Node 的协议;发送事件时,假设协议为 fuchsia.io/Node,而目标协议为专用协议。

134217728

指定此标志以请求与写入权限处理相关的 POSIX 兼容性。 目前,它只会影响 Open 期间的权限处理情况:

  • 如果目标路径是目录,当且仅当当前连接和所有中间装载点均可写入时,新连接的权限才会扩展为包含 WRITABLE
  • 否则,系统会忽略此标志。如果请求的权限高于当前连接或任何中间装载点的权限,就会出现访问遭拒错误。

如果省略此标志,则打开会始终使用所请求的权限,如果请求的权限超过了附加到当前连接的权限,操作将失败并显示“访问遭拒”错误。

如果请求连接是只读的,并且请求的权限是只读的,则该标志可能会被服务器忽略,并且不会被转发到下游。这是一个实现细节,对于跨装载点强制执行分层权限来说必不可少,并且应该不会对客户端的预期行为产生任何影响。

268435456

指定此标志以请求与执行权限处理相关的 POSIX 兼容性。目前,它只会影响 Open 期间的权限处理情况:

  • 如果目标路径是目录,当且仅当当前连接和所有中间装载点均可执行时,新连接的权限才会扩展为包含 EXECUTABLE
  • 否则,系统会忽略此标志。如果请求的权限高于当前连接或任何中间装载点的权限,就会出现访问遭拒错误。

如果省略此标志,则打开会始终使用所请求的权限,如果请求的权限超过了附加到当前连接的权限,操作将失败并显示“访问遭拒”错误。

如果请求连接是只读的,并且请求的权限是只读的,则该标志可能会被服务器忽略,并且不会被转发到下游。这是一个实现细节,对于跨装载点强制执行分层权限来说必不可少,并且应该不会对客户端的预期行为产生任何影响。

33554432

断言要打开的对象不是目录。 如果目标对象是目录,则返回错误。

67108864

在克隆期间使用新连接时,新连接会继承源连接的权限,无论它是文件还是目录。否则,克隆会尝试使用所请求的权限。将任何 RIGHT_* 标志与 OpenFlags.CLONE_SAME_RIGHTS 一起传递是无效的。

16777216

以块存储设备的形式打开目标对象。

运营严格

类型:uint64

fuchsia.io/rights-abilities.fidl 中定义

权利能力背后的常见成员定义。某些操作可能仅适用于特定节点类型(例如 Operations.MODIFY_DIRECTORY 仅适用于目录)。

名称说明
1

连接到目录中的服务。

2

读取节点或其子节点的字节内容。

4

向节点或其子节点的字节内容写入数据。

8

执行节点或其子节点的字节内容。

16

读取节点和/或其子节点的属性。

32

更新节点和/或其子节点的属性。

64

读取目录中的节点列表。

128

从目录打开节点。必须使用 Rights.ENUMERATE 进行指定,因为可以通过打开子项来探测目录内容。

256

修改目录中的节点列表,例如创建、重命名、关联/解除关联等... 必须使用 Rights.ENUMERATE 进行指定,因为在创建节点期间可以通过名称冲突探测目录内容。

SymlinkProtocolFlags灵活

类型:uint64

fuchsia.io/directory2.fidl 中定义

名称说明

DisconnectFlags 严格

类型:uint64

fuchsia.io/directory2.fidl 中定义

名称说明
1

设置好后,如果对象不是目录,取消关联将失败(显示 ZX_ERR_NOT_DIR)。

VmoFlags 严格

类型:uint32

fuchsia.io/file2.fidl 中定义

名称说明
1

请求读取 VMO。

2

请求可写入 VMO。

4

请求 VMO 可执行。

65536

需要底层 VMO 的写入时复制克隆。如果无法克隆 VMO,请求应失败。不可随 SHARED_BUFFER 提供。

私有克隆至少对 zx_vmo_create_child() 使用 ZX_VMO_CHILD_SNAPSHOT_AT_LEAST_ON_WRITE 标志的保证。这意味着返回的 VMO 将是写入时复制(如果请求了 WRITE),但不一定能反映底层文件的后续内容更改。返回的 VMO 不会反映文件的大小变化。这些语义与 POSIX mmap() MAP_PRIVATE 标志的语义匹配。

在某些情况下,需要保证文件快照的客户端可以使用 SHARED_BUFFER,然后将 zx_vmo_create_child()ZX_VMO_CHILD_SNAPSHOT 搭配使用。但是,除了无法返回 SHARED_BUFFER 的情况之外,如果将 VMO 附加到分页器,则创建完整快照也会失败。由于大多数文件系统都将使用分页系统,因此应仅在客户端与已知服务器通信的特定情况下使用完整快照方法。

131072

要求虚拟机能够直接访问文件底层 VMO 的内容。如果无法提供此类 VMO,请求应失败。可能不随 PRIVATE_CLONE 提供。

即使请求了 WRITE 访问权限,返回的 VMO 也可能不可调整大小。在这种情况下,应使用 File.Resize 来调整文件的大小。

WatchMask 严格

类型:uint32

fuchsia.io/directory.fidl 中定义

名称说明
1

Directory.Watch 使用。请求传输 WatchEvent.DELETED

2

Directory.Watch 使用。请求传输 WatchEvent.ADDED

4

Directory.Watch 使用。请求传输 WatchEvent.REMOVED

8

Directory.Watch 使用。请求传输 WatchEvent.EXISTING

16

Directory.Watch 使用。请求传输 WatchEvent.IDLE

常量

名称类型说明
DIRECTORY_PROTOCOL_NAME fuchsia.io/Directory String
FILE_PROTOCOL_NAME fuchsia.io/File String
INO_UNKNOWN 18446744073709551615 uint64

没有 ino 值的节点应从 Readdir 和 GetAttr 返回此值。

MAX_ATTRIBUTE_NAME 255 uint64

扩展属性名称的大小上限。

添加日期:18
MAX_BUF 8192 uint64

可以针对缓冲操作传输的最大缓冲区空间。 目前,此容量在一定程度上是任意的。

MAX_FILENAME 255 uint64

单个文件系统组件的最大长度(以字节为单位)。

MAX_FS_NAME_BUFFER 32 uint64
MAX_INLINE_ATTRIBUTE_VALUE 32768 uint64

要以内嵌方式包含的扩展属性值的大小上限。大于此大小的值会在 vmo 中传递。

添加日期:18
MAX_LIST_ATTRIBUTES_CHUNK 128 uint64

ListExtendedAttributes 迭代器中分块的大小上限。

添加日期:18
MAX_NAME_LENGTH 255 uint64

单个文件系统组件的最大长度(以字节为单位)。

MAX_PATH_LENGTH 4095 uint64

文件系统路径的最大长度(以字节为单位)。

MAX_TRANSFER_SIZE 8192 uint64

使用字节矢量的读取/写入操作所允许的最大 I/O 大小。

MODE_PROTECTION_MASK 4095 uint32

为 posix 保护预留的位。原生 fuchsia 文件系统无需设置 MODE_PROTECTION_MASK 中包含的位,但希望这样设置的文件系统可以参考 sys/stat.h 来了解其定义。

MODE_TYPE_BLOCK_DEVICE 24576 uint32
MODE_TYPE_DIRECTORY 16384 uint32
MODE_TYPE_FILE 32768 uint32
MODE_TYPE_MASK 1044480 uint32

表示节点类型的位。检查节点类型的规范机制是采用“模式”,按位将其与 MODE_TYPE_MASK 运算,并针对模式类型检查是否完全相等。

MODE_TYPE_SERVICE 65536 uint32
NODE_PROTOCOL_NAME fuchsia.io/Node String
OPEN_FLAGS_ALLOWED_WITH_NODE_REFERENCE

打开节点引用时使用的标志必须位于此掩码范围内。

OPEN_RIGHTS

所有已知权利。

RW_STAR_DIR

目录权限别名 rw* 的别名

RX_STAR_DIR

目录权限别名 rx* 的别名

R_STAR_DIR

目录权限别名 r* 的别名

W_STAR_DIR

目录权限别名 w* 的别名

X_STAR_DIR

目录权限别名 x* 的别名

别名

名称说明
功能 fuchsia.io/Operations

功能是节点固有的属性。这些参数会指定它支持的操作。

在不支持此操作的节点上调用某项操作会导致 ZX_ERR_NOT_SUPPORTED。请注意,如果两者都适用,ZX_ERR_ACCESS_DENIED 的优先级高于 ZX_ERR_NOT_SUPPORTED

ExtendedAttributeName vector[MAX_ATTRIBUTE_NAME]

扩展属性的名称。不能包含任何 null 字节。除了该上限和大小上限之外,该名称没有特定结构。

添加日期:18
ID uint64

用于标识节点的类型(如果实现支持某种唯一节点 ID 概念)。

唯一性保证

客户端通常会呈现一个目录树,该树是将多个后备实现实例组合在一起的结果。一个 ID 仅在相应实例中是唯一的。由于以透明方式转发目录代理,因此它们的边界在 Fuchsia 上是隐式的。客户端在遍历目录树时,如果遇到来自不同后备实例的节点,可能会发现完全相同的 Id。因此,该 ID 最适合用于调试和提供信息。

fuchsia.fs/FilesystemInfo.fs_id 字段可用于区分来自不同后备实例的 ID。

名称 string[MAX_NAME_LENGTH]

节点名称(即单个路径组成部分)的类型。例如:foo

不变量

有效的节点名称必须满足以下条件:

  • 该值不得超过 MAX_NAME_LENGTH 个。
  • 此字段不能为空。
  • 而不能是“..”(点-点)。
  • 不能是“.”(单点)。
  • 不能包含“/”。
  • 它不能包含嵌入式 NUL。
路径 string[MAX_PATH_LENGTH]

路径是包含一个或多个组成部分的字符串,以“/”分隔。例如 foo/bar/baz

不变量

有效路径必须满足以下条件:

  • 此字段不能为空。
  • 其长度不得超过 MAX_PATH_LENGTH
  • 它不能以“/”开头。
  • 不得以“/”结尾。
  • 该名称必须正好是“.”,或者它的每个组成部分都必须是有效的 Name

路径应在客户端转换为其规范形式。 例如,客户端应将 "foo/bar/.././baz/" 转换为 "foo/baz",然后再将其用作路径。

权利 fuchsia.io/Operations

权限是关联特有的属性。它们会限制可以对连接执行的操作,包括可以被授予新连接的操作。

在没有相应权限的情况下调用操作会导致 ZX_ERR_ACCESS_DENIED,即使节点不支持该操作也是如此。

SymlinkTarget vector[MAX_PATH_LENGTH]
令牌 zx/Handle

用于标识与节点的连接的类型。 它表示一项功能:对具有相关权限的节点的引用。

转移 vector[MAX_TRANSFER_SIZE]

用于读/写操作的字节矢量类型。