协议
AdvisoryLocking
在 fuchsia.io/locking.fidl 中定义
咨询锁定协议。
此协议旨在组合成 |File| 协议,以支持建议性锁定。
Advisory Lock 纯粹是建议。不会阻止通过此连接或其他连接对文件执行实际的读取或写入操作。
这些基元旨在支持 flock() 和 fcntl()(具体来讲,就是 F_SETLK、F_SETLKW 和 F_GETLK),在 Fuchsia 上运行的代码希望在其他操作系统中使用这些功能。
AdvisoryLock
获取底层文件上的建议锁。
锁定将持续到关闭此连接或使用 |AdvisoryLockType.UNLOCK| 调用此方法来显式释放锁定。
Advisory Lock 纯粹是建议。不会阻止通过此连接或其他连接对文件执行实际的读取或写入操作。
此方法需要以下权限:
- Rights.READ_BYTES(如果
request.type
为 AdvisoryLockType.READ)。 - Rights.WRITE_BYTES(如果
request.type
为 AdvisoryLockType.WRITE)。
错误
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 纯粹是建议。不会阻止通过此连接或其他连接对文件执行实际的读取或写入操作。
此方法需要以下权限:
- Rights.READ_BYTES(如果
request.type
为 AdvisoryLockType.READ)。 - Rights.WRITE_BYTES(如果
request.type
为 AdvisoryLockType.WRITE)。
错误
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
|
CreateSymlink
创建符号链接。
name
是要为已创建的符号链接指定的名称。target
是符号链接的目标,在服务器上没有任何意义。除了服务器选择的长度上限之外,服务器不会对 target
执行任何验证。connection
是通道的可选服务器端,将在成功创建的节点上读出符号链接协议。
-
如果
name
已经存在,则会发生ZX_ERR_ALREADY_EXISTS
错误。 -
如果
target
超出符号链接的服务器长度限制,则会出现ZX_ERR_BAD_PATH
错误。 -
如果
name
不是有效的名称,则出现错误ZX_ERR_INVALID_ARGS
。 -
如果服务器不支持创建符号链接,则会发生
ZX_ERR_NOT_SUPPORTED
错误。
请求
名称 | 类型 |
---|---|
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 权限。
请求
名称 | 类型 |
---|---|
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_WRITABLE
和 OpenFlags.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 权限。
请求
名称 | 类型 |
---|---|
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
。
请求
名称 | 类型 |
---|---|
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 权限。
请求
名称 | 类型 |
---|---|
name |
ExtendedAttributeName
|
响应
名称 | 类型 |
---|---|
payload |
Node2_RemoveExtendedAttribute_Result
|
重命名
在由 dst_parent_token
表示的目录中,将名为 src
的节点重命名为 dst
。
src
和 dst
必须是有效的节点名称。如需了解有效名称的构成,请参阅名称。
此方法需要对当前连接以及由 dst_parent_token
标识的连接拥有以下权限:
为避免权利升级,必须满足以下要求。
如果源目录和目标目录不同,源目录还必须具有文件所支持的最大能力集,通常为 Rights.READ_BYTES、Rights.WRITE_BYTES、Rights.GET_ATTRIBUTES 和 Rights.UPDATE_ATTRIBUTES。某些文件系统可能也支持 Rights.EXECUTE 权限。
如果 src
引用目录,且与目标目录不同,则源目录还必须具有 Rights.CONNECT 和 Rights.TRAVERSE 权限。
- 如果
src
或dst
无效,则显示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 权限。
请求
名称 | 类型 |
---|---|
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_WRITABLE
和 OpenFlags.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
。
请求
名称 | 类型 |
---|---|
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 纯粹是建议。不会阻止通过此连接或其他连接对文件执行实际的读取或写入操作。
此方法需要以下权限:
- Rights.READ_BYTES(如果
request.type
为 AdvisoryLockType.READ)。 - Rights.WRITE_BYTES(如果
request.type
为 AdvisoryLockType.WRITE)。
错误
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
|
CreateSymlink
创建符号链接。
name
是要为已创建的符号链接指定的名称。target
是符号链接的目标,在服务器上没有任何意义。除了服务器选择的长度上限之外,服务器不会对 target
执行任何验证。connection
是通道的可选服务器端,将在成功创建的节点上读出符号链接协议。
-
如果
name
已经存在,则会发生ZX_ERR_ALREADY_EXISTS
错误。 -
如果
target
超出符号链接的服务器长度限制,则会出现ZX_ERR_BAD_PATH
错误。 -
如果
name
不是有效的名称,则出现错误ZX_ERR_INVALID_ARGS
。 -
如果服务器不支持创建符号链接,则会发生
ZX_ERR_NOT_SUPPORTED
错误。
请求
名称 | 类型 |
---|---|
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 权限。
请求
名称 | 类型 |
---|---|
name |
ExtendedAttributeName
|
响应
名称 | 类型 |
---|---|
payload |
Node2_GetExtendedAttribute_Result
|
ListExtendedAttributes
针对与此节点关联的所有扩展属性名称创建迭代器。如果发生错误,它会在迭代器请求通道上以 epitaph 形式返回,然后该通道将关闭。
GetExtendedAttributes 可与这些名称中的任何一个一起使用,以检索关联的值。
此方法需要 Rights.GET_ATTRIBUTES 权限。
请求
名称 | 类型 |
---|---|
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 权限。
请求
名称 | 类型 |
---|---|
name |
ExtendedAttributeName
|
响应
名称 | 类型 |
---|---|
payload |
Node2_RemoveExtendedAttribute_Result
|
重命名
在由 dst_parent_token
表示的目录中,将名为 src
的节点重命名为 dst
。
src
和 dst
必须是有效的节点名称。如需了解有效名称的构成,请参阅名称。
此方法需要对当前连接以及由 dst_parent_token
标识的连接拥有以下权限:
为避免权利升级,必须满足以下要求。
如果源目录和目标目录不同,源目录还必须具有文件所支持的最大能力集,通常为 Rights.READ_BYTES、Rights.WRITE_BYTES、Rights.GET_ATTRIBUTES 和 Rights.UPDATE_ATTRIBUTES。某些文件系统可能也支持 Rights.EXECUTE 权限。
如果 src
引用目录,且与目标目录不同,则源目录还必须具有 Rights.CONNECT 和 Rights.TRAVERSE 权限。
- 如果
src
或dst
无效,则显示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 权限。
请求
名称 | 类型 |
---|---|
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 中定义
GetNext
获取下一个扩展属性名称。如果这是最后一个数据块,最后一个数据块为 true,相应通道将在调用后关闭。
请求
<EMPTY>
响应
名称 | 类型 |
---|---|
payload |
ExtendedAttributeIterator_GetNext_Result
|
文件
在 fuchsia.io/file2.fidl 中定义
一个 Node,包含一系列具有固定长度的字节。
注意:克隆的连接不会与其源连接共享其跳转偏移量。
AdvisoryLock
获取底层文件上的建议锁。
锁定将持续到关闭此连接或使用 |AdvisoryLockType.UNLOCK| 调用此方法来显式释放锁定。
Advisory Lock 纯粹是建议。不会阻止通过此连接或其他连接对文件执行实际的读取或写入操作。
此方法需要以下权限:
- Rights.READ_BYTES(如果
request.type
为 AdvisoryLockType.READ)。 - Rights.WRITE_BYTES(如果
request.type
为 AdvisoryLockType.WRITE)。
错误
ZX_ERR_BAD_STATE
无法获取指定的锁定类型。例如,另一个连接可能具有存在冲突的锁定类型。ZX_ERR_NOT_SUPPORTED
此文件不支持建议性锁定。ZX_ERR_ACCESS_DENIED
此连接没有足够的权限获取指定类型的锁定。
请求
名称 | 类型 |
---|---|
request |
AdvisoryLockRequest
|
响应
名称 | 类型 |
---|---|
payload |
AdvisoryLocking_AdvisoryLock_Result
|
分配
为此文件预先分配磁盘空间。
请求
名称 | 类型 |
---|---|
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
。
请求
名称 | 类型 |
---|---|
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,以指明所需的访问模式。
- 响应
vmo
请求的 zx.Handle:VMO。
- 错误,出现表示失败的 zx.Status 值。
此方法需要以下权限:
- Rights.READ_BYTES(如果
flags
包含 VmoFlags.READ)。 - Rights.WRITE_BYTES(如果
flags
包含 VmoFlags.WRITE)。 - Rights.EXECUTE(如果
flags
包含 VmoFlags.EXECUTE)。
请求
名称 | 类型 |
---|---|
flags |
VmoFlags
|
响应
名称 | 类型 |
---|---|
payload |
File_GetBackingMemory_Result
|
GetConnectionInfo
获取有关连接的信息。
此方法不需要任何权利。
请求
<EMPTY>
响应
名称 | 类型 |
---|---|
payload |
ConnectionInfo
|
GetExtendedAttribute
获取与此节点的指定属性 name
相关联的值。
属性名称的长度上限为 MAX_ATTRIBUTE_NAME。系统不会对它们施加任何特定结构。
此方法需要 Rights.GET_ATTRIBUTES 权限。
请求
名称 | 类型 |
---|---|
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_BYTES、Rights.WRITE_BYTES、Rights.GET_ATTRIBUTES 和 Rights.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 权限。
请求
名称 | 类型 |
---|---|
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 权限。
请求
名称 | 类型 |
---|---|
name |
ExtendedAttributeName
|
响应
名称 | 类型 |
---|---|
payload |
Node2_RemoveExtendedAttribute_Result
|
重新标记为营业
创建与同一节点的另一个连接。
请求
名称 | 类型 |
---|---|
rights_request |
RightsRequest
|
object_request |
server_end<Node>
|
调整大小
将文件大小压缩或增长到“length”字节。
如果此操作减小了文件大小,额外的尾随数据将被舍弃。 如果此操作增加了文件大小,扩展区域就会出现看似为零的情况。
此方法需要 Rights.WRITE_BYTES 权限。
请求
名称 | 类型 |
---|---|
length |
uint64
|
响应
名称 | 类型 |
---|---|
payload |
File_Resize_Result
|
进度
移动下一次调用 Read 或 Write 时的偏移量。跳转偏移量特定于每个文件连接。
- 向
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 权限。
请求
名称 | 类型 |
---|---|
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 中定义
LinkInto
在由 dst_parent_token
表示的目录中创建一个名为 dst
的此对象的链接。
dst
必须是已解析的对象名称。在字符串中包含“/”将返回 ZX_ERR_INVALID_ARGS
。
使用此方法时,您只需要文件系统支持对此对象最多拥有一组权限。
对于文件,通常为 Rights.READ_BYTES、Rights.WRITE_BYTES、Rights.GET_ATTRIBUTES 和 Rights.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 权限。
请求
名称 | 类型 |
---|---|
name |
ExtendedAttributeName
|
响应
名称 | 类型 |
---|---|
payload |
Node2_GetExtendedAttribute_Result
|
GetFlags
获取用于访问此文件的 Directory.Open
权限和标记。
此方法不需要任何权利。
请求
<EMPTY>
响应
名称 | 类型 |
---|---|
s |
zx/Status
|
flags |
OpenFlags
|
ListExtendedAttributes
针对与此节点关联的所有扩展属性名称创建迭代器。如果发生错误,它会在迭代器请求通道上以 epitaph 形式返回,然后该通道将关闭。
GetExtendedAttributes 可与这些名称中的任何一个一起使用,以检索关联的值。
此方法需要 Rights.GET_ATTRIBUTES 权限。
请求
名称 | 类型 |
---|---|
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 权限。
请求
名称 | 类型 |
---|---|
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 权限。
请求
名称 | 类型 |
---|---|
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 权限。
请求
名称 | 类型 |
---|---|
name |
ExtendedAttributeName
|
响应
名称 | 类型 |
---|---|
payload |
Node2_GetExtendedAttribute_Result
|
ListExtendedAttributes
针对与此节点关联的所有扩展属性名称创建迭代器。如果发生错误,它会在迭代器请求通道上以 epitaph 形式返回,然后该通道将关闭。
GetExtendedAttributes 可与这些名称中的任何一个一起使用,以检索关联的值。
此方法需要 Rights.GET_ATTRIBUTES 权限。
请求
名称 | 类型 |
---|---|
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 权限。
请求
名称 | 类型 |
---|---|
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 权限。
请求
名称 | 类型 |
---|---|
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
。
请求
名称 | 类型 |
---|---|
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'],包含一个符号链接。
克隆
创建与同一远程对象的另一个连接。
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 权限。
请求
名称 | 类型 |
---|---|
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_BYTES、Rights.WRITE_BYTES、Rights.GET_ATTRIBUTES 和 Rights.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 权限。
请求
名称 | 类型 |
---|---|
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 权限。
请求
名称 | 类型 |
---|---|
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 权限。
请求
名称 | 类型 |
---|---|
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 的偏移量。 如果 origin 为 SeekOrigin.START,则不能为负数。 |
无默认取景方式 |
length |
int64
|
字节范围的长度(以字节为单位)。 如果长度为零,则无论文件有多大,字节范围都会一直延伸到文件末尾。 如果长度为负数,则字节范围包括字节 |
无默认取景方式 |
AdvisoryLocking_AdvisoryLock_Response
在 fuchsia.io/locking.fidl 中定义
<EMPTY>
Directory2_CreateSymlink_Response
在 fuchsia.io/directory2.fidl 中定义
<EMPTY>
Directory2_Rename_Response
在 fuchsia.io/directory2.fidl 中定义
<EMPTY>
Directory2_Unlink_Response
在 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>?
|
此为可选事件,用于传输与对象的可读性或可写性相关的信息。此事件将中继有关底层对象(而非授予客户端的功能)的信息:此事件可能会在没有读取功能的连接上被标记为“可读取”。 可以观察到此事件的“ |
无默认取景方式 |
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
|
存储节点所需的空间(可能大于大小),以字节为单位。 |
无默认取景方式 |
link_count |
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 |
仅打开现有对象,不要创建新对象。 |
NEVER_DEPRECATED |
1 |
已弃用:19
|
ALLOW_EXISTING |
2 |
如果对象不存在,请创建一个新对象,否则打开现有对象。 |
始终 |
3 |
如果不存在,请创建一个新对象,否则请求将失败并显示 |
DirentType strict
类型:uint8
在 fuchsia.io/directory.fidl 中定义
名称 | 值 | 说明 |
---|---|---|
未知 |
0 |
类型未知的脏污。 |
目录 |
4 |
表示目录对象的 dirent。 |
BLOCK_DEVICE |
6 |
表示块存储设备对象的 dirent。 |
文件 |
8 |
表示文件对象的 dirent。 |
符号链接 |
10 |
符号链接。 添加日期:18
|
服务 |
16 |
表示服务对象的 dirent。 |
HashAlgorithm 灵活
类型:uint8
在 fuchsia.io/file2.fidl 中定义
表示用于为启用了 fsverity 的文件构建 Merkle 树的哈希算法。
名称 | 值 | 说明 |
---|---|---|
SHA256 |
1 |
|
SHA512 |
2 |
SeekOrigin 严格
类型:uint32
在 fuchsia.io/file2.fidl 中定义
用于更新跳转偏移量的参照点。请参阅 File.Seek。
此枚举与 zx_stream_seek_origin_t
枚举匹配。
名称 | 值 | 说明 |
---|---|---|
开始 |
0 |
从文件开头跳转。
跳转偏移量将设置为 |
当前 |
1 |
从文件的当前位置跳转。
跳转偏移量将是当前跳转偏移量加上 |
结束 |
2 |
从文件末尾跳转。
跳转偏移量为文件大小加 |
SetExtendedAttributeMode 严格
类型:uint32
在 fuchsia.io/node2.fidl 中定义
名称 | 值 | 说明 |
---|---|---|
SET |
1 |
设置扩展属性的值,无论其是否已存在。 |
创建 |
2 |
创建一个新的扩展属性。如果已存在,则失败。 |
替换 |
3 |
替换现有扩展属性的值。如果不存在,则失败。 |
WatchEvent 严格
类型:uint8
在 fuchsia.io/directory.fidl 中定义
名称 | 值 | 说明 |
---|---|---|
DELETED |
0 |
表示所监控的目录已被删除。针对此事件返回的名称将为 |
已添加 |
1 |
表示已在目录中创建(新增或移动)节点。 |
已移除 |
2 |
标识已从目录中移除(已删除或移动)的节点。 |
现有 |
3 |
标识在监控启动时目录中已存在的节点。 |
空闲 |
4 |
标识不再发送任何 |
表
AdvisoryLockRequest
在 fuchsia.io/locking.fidl 中定义
序数 | 野战 | 类型 | 说明 |
---|---|---|---|
1 |
type |
AdvisoryLockType
|
要获取的锁定类型。 如果此字段不存在,AdvisoryLock 方法将失败,并显示 ZX_ERR_INVALID_ARGS。 |
2 |
range |
AdvisoryLockRange
|
要锁定的文件中的字节范围。 范围可以超出文件末尾,但不能超出文件开头。 如果没有此字段,则范围默认为整个文件。 |
3 |
wait |
bool
|
文件是否应等待响应 AdvisoryLock 方法,直到可以获取请求的锁。 如果缺少此字段,文件将不会等待。 |
ConnectionInfo 资源
在 fuchsia.io/node2.fidl 中定义
序数 | 野战 | 类型 | 说明 |
---|---|---|---|
1 |
rights |
Rights
|
当前连接拥有的权利。注意: |
ConnectorInfo
在 fuchsia.io/node2.fidl 中定义
序数 | 野战 | 类型 | 说明 |
---|---|---|---|
1 |
attributes |
NodeAttributes2
|
请求的对象属性。此字段仅在请求时填充。 添加日期:18
|
DirectoryEntry
在 fuchsia.io/directory2.fidl 中定义
序数 | 野战 | 类型 | 说明 |
---|---|---|---|
1 |
name |
Name
|
节点名称。此字段必须存在。 |
2 |
protocols |
NodeProtocolKinds
|
描述节点支持的表示法类型。 |
3 |
abilities |
Abilities
|
描述节点支持的操作类型。 |
4 |
id |
Id
|
节点的 ID。请参阅 Id。
此 |
DirectoryEnumerateOptions
在 fuchsia.io/directory2.fidl 中定义
序数 | 野战 | 类型 | 说明 |
---|
DirectoryInfo
在 fuchsia.io/directory2.fidl 中定义
序数 | 野战 | 类型 | 说明 |
---|---|---|---|
1 |
attributes |
NodeAttributes2
|
所请求的目录属性。此字段仅在请求时填充。 添加日期:18
|
DirectoryProtocolOptions
在 fuchsia.io/directory2.fidl 中定义
序数 | 野战 | 类型 | 说明 |
---|---|---|---|
1 |
optional_rights |
Rights
|
待协商的可选权利。 如果存在,则表示调用方请求额外的可选权限,这些权利等于此值与请求连接的权限的交集。由于此请求是通过多个跃点代理的,因此可作为高水准来阻止权限升级;在进行代理之前,每个代理都必须将该值与所请求连接的权限相交。 在表达 POSIX 语义时,此字段是必要的,目录的 |
FileInfo 资源
在 fuchsia.io/file2.fidl 中定义
节点的文件表示形式的辅助数据。
序数 | 野战 | 类型 | 说明 |
---|---|---|---|
1 |
is_append |
bool
|
如果文件在附加模式下打开,则为 true。 在附加模式下,跳转偏移量在每次写入之前移至末尾,这两个步骤以原子方式执行。 |
2 |
observer |
handle<event>
|
此为可选事件,用于传输与对象的可读性或可写性相关的信息。此事件将中继有关底层对象(而非授予客户端的功能)的信息:此事件可能会在没有读取功能的连接上被标记为“可读”。 如果满足以下条件,此事件就会显示:
可以在此事件中观察到 FileSignal 值。 |
3 |
stream |
handle<stream>
|
可选的流对象,可用于对文件执行读写操作。 与使用 File 协议中的读取和写入操作读取和写入文件相比,使用流对象读取和写入文件的速度最高可达到 20 倍。 |
4 |
attributes |
NodeAttributes2
|
请求的文件属性。此字段仅在请求时填充。 添加日期:18
|
ImmutableNodeAttributes
在 fuchsia.io/node2.fidl 中定义
序数 | 野战 | 类型 | 说明 |
---|---|---|---|
1 |
protocols |
NodeProtocolKinds
|
描述节点支持的表示法类型。注意:这不是连接时间协商的结果,连接时间协商通过 |
2 |
abilities |
Abilities
|
描述节点支持的操作类型。注意:这与关联时使用的权利不同。 |
3 |
content_size |
uint64
|
节点大小(以字节为单位)。 |
4 |
storage_size |
uint64
|
存储节点所需的空间(可能大于节点大小)(以字节为单位)。 |
5 |
link_count |
uint64
|
指向节点的硬链接的数量。必须至少包含 1 个。 |
6 |
id |
Id
|
节点的 ID。请参阅 Id。
此 |
7 |
change_time |
uint64
|
自 Unix 纪元(世界协调时间)以来对元数据的上次更改时间(以纳秒为单位)。 添加了:HEAD
|
8 |
options |
VerificationOptions
|
包含针对已启用 verity 的文件的验证选项。 添加了:HEAD
|
9 |
root_hash |
vector<uint8>[64]
|
文件的根哈希值。并非所有文件系统都支持在所有文件中执行此操作。 添加了:HEAD
|
10 |
verity_enabled |
bool
|
如果此文件启用了 verity,则为 true。 添加了:HEAD
|
MutableNodeAttributes
在 fuchsia.io/node2.fidl 中定义
序数 | 野战 | 类型 | 说明 |
---|---|---|---|
1 |
creation_time |
uint64
|
自 Unix 纪元(世界协调时间)以来的创建时间,以纳秒为单位。 |
2 |
modification_time |
uint64
|
自 Unix 纪元(世界协调时间)以来的最后一次修改时间,以纳秒为单位。 |
3 |
mode |
uint32
|
POSIX 兼容性属性。大多数文件系统都不支持这些格式。执行解析操作必须直接存储和检索它们(例如,作为扩展属性),而不应尝试解析它们(例如,通过特别执行权限检查或处理设备打开情况)。 添加日期:18
|
4 |
uid |
uint32
|
添加日期:18
|
5 |
gid |
uint32
|
添加日期:18
|
6 |
rdev |
uint64
|
添加日期:18
|
7 |
access_time |
uint64
|
上次访问时间,以自 Unix 纪元(世界协调时间)以来的纳秒为单位。请注意,如果这是唯一一个要更新的属性,则服务器可能不会总是更新此属性。 添加日期:18
|
NodeOptions
在 fuchsia.io/directory2.fidl 中定义
打开节点时使用的选项。
序数 | 野战 | 类型 | 说明 |
---|---|---|---|
1 |
flags |
NodeFlags
|
|
2 |
protocols |
NodeProtocols
|
调用方可以通过设置与预期类型对应的协议来断言对象的类型:
如果存在多个协议,则最终协议可能会成为其中任何一个。调用方应指定 NodeFlags.GET_REPRESENTATION 以接收 Node.OnRepresentation 事件,以确定协议。 |
3 |
mode |
CreationMode
|
指定应如何创建目标对象。如果要创建对象,则必须通过 如果类型不明确(例如同时设置了 添加数量:19
|
4 |
rights |
Rights
|
已请求对新连接的权限。如果任何权利超出当前连接的权限,object_request 将使用 授予连接的权限将缩小到目标节点类型支持的操作。例如,如果目标节点是一个文件,并且同时请求了 Rights.WRITE_BYTES 和 Rights.MODIFY_DIRECTORY,则生成的连接只会被授予 Rights.WRITE_BYTES。 |
5 |
attributes |
NodeAttributesQuery
|
如果已设置 NodeFlags.GET_REPRESENTATION 标志,则要在 Node.OnRepresentation 中返回属性。这需要父级连接上有 Rights.GET_ATTRIBUTES,但在生成的连接上则不需要。 添加日期:18
|
6 |
create_attributes |
MutableNodeAttributes
|
如果要创建对象,此字段会指定在创建时应与对象一起存储的属性。服务器可能不支持设置任何或所有属性,在这种情况下,它们将返回 添加日期:18
|
NodeProtocols
在 fuchsia.io/directory2.fidl 中定义
序数 | 野战 | 类型 | 说明 |
---|---|---|---|
1 |
directory |
DirectoryProtocolOptions
|
|
2 |
file |
FileProtocolFlags
|
|
3 |
symlink |
SymlinkProtocolFlags
|
添加日期:18
|
4 |
node |
NodeProtocolFlags
|
请求节点协议。唯一支持的是 Rights.GET_ATTRIBUTES。对生成的连接调用 添加日期:18
|
RightsRequest
在 fuchsia.io/node2.fidl 中定义
序数 | 野战 | 类型 | 说明 |
---|---|---|---|
1 |
rights |
Rights
|
已请求对新连接的权限。 如果 rights 超出了发出请求的连接的权限,则 object_request 将以 如果不存在,则继承发出请求的连接的权限。 |
SymlinkInfo
在 fuchsia.io/symlink.fidl 中定义
序数 | 野战 | 类型 | 说明 |
---|---|---|---|
1 |
target |
SymlinkTarget
|
符号链接在服务器上没有意义;客户端可以随意解释其选择的目标。 |
2 |
attributes |
NodeAttributes2
|
为符号链接请求的属性。此字段仅在请求时填充。 |
UnlinkOptions
在 fuchsia.io/directory2.fidl 中定义
序数 | 野战 | 类型 | 说明 |
---|---|---|---|
1 |
flags |
UnlinkFlags
|
VerificationOptions
在 fuchsia.io/file2.fidl 中定义
用于为文件启用 verity 的一组选项。
序数 | 野战 | 类型 | 说明 |
---|---|---|---|
1 |
hash_algorithm |
HashAlgorithm
|
|
2 |
salt |
vector<uint8>[32]
|
在进行哈希处理之前,每个块都会添加 |
联合
AdvisoryLocking_AdvisoryLock_Result 严格
在 fuchsia.io/locking.fidl 中定义
序数 | 变体 | 类型 | 说明 |
---|---|---|---|
1 |
response |
AdvisoryLocking_AdvisoryLock_Response
|
|
2 |
err |
zx/Status
|
ConnectionProtocols 灵活
在 fuchsia.io/directory2.fidl 中定义
序数 | 变体 | 类型 | 说明 |
---|---|---|---|
1 |
connector |
ConnectorFlags
|
请求在连接上提供节点的底层协议。 |
2 |
node |
NodeOptions
|
请求在连接上提供底层 Node 协议。 |
Directory2_CreateSymlink_Result 严格
在 fuchsia.io/directory2.fidl 中定义
序数 | 变体 | 类型 | 说明 |
---|---|---|---|
1 |
response |
Directory2_CreateSymlink_Response
|
|
2 |
err |
zx/Status
|
Directory2_Rename_Result 严格
在 fuchsia.io/directory2.fidl 中定义
序数 | 变体 | 类型 | 说明 |
---|---|---|---|
1 |
response |
Directory2_Rename_Response
|
|
2 |
err |
zx/Status
|
Directory2_Unlink_Result 严格
在 fuchsia.io/directory2.fidl 中定义
序数 | 变体 | 类型 | 说明 |
---|---|---|---|
1 |
response |
Directory2_Unlink_Response
|
|
2 |
err |
zx/Status
|
DirectoryIterator_GetNext_Result 严格
在 fuchsia.io/directory2.fidl 中定义
序数 | 变体 | 类型 | 说明 |
---|---|---|---|
1 |
response |
DirectoryIterator_GetNext_Response
|
|
2 |
err |
zx/Status
|
ExtendedAttributeIterator_GetNext_Result 严格
在 fuchsia.io/node2.fidl 中定义
序数 | 变体 | 类型 | 说明 |
---|---|---|---|
1 |
response |
ExtendedAttributeIterator_GetNext_Response
|
|
2 |
err |
zx/Status
|
ExtendedAttributeValue 严格 资源
在 fuchsia.io/node2.fidl 中定义
扩展属性的值类型。如果值小于 32768 字节,则以内嵌方式包含该值。大于此大小的值会被写入 vmo 缓冲区。
序数 | 变体 | 类型 | 说明 |
---|---|---|---|
1 |
bytes |
vector<uint8>[32768]
|
|
2 |
buffer |
handle<vmo>
|
File_Allocate_Result 严格
在 fuchsia.io/file2.fidl 中定义
序数 | 变体 | 类型 | 说明 |
---|---|---|---|
1 |
response |
File_Allocate_Response
|
|
2 |
err |
zx/Status
|
File_EnableVerity_Result 严格
在 fuchsia.io/file2.fidl 中定义
序数 | 变体 | 类型 | 说明 |
---|---|---|---|
1 |
response |
File_EnableVerity_Response
|
|
2 |
err |
zx/Status
|
File_GetBackingMemory_Result strict 资源
在 fuchsia.io/file2.fidl 中定义
序数 | 变体 | 类型 | 说明 |
---|---|---|---|
1 |
response |
File_GetBackingMemory_Response
|
|
2 |
err |
zx/Status
|
File_ReadAt_Result 严格
在 fuchsia.io/file2.fidl 中定义
序数 | 变体 | 类型 | 说明 |
---|---|---|---|
1 |
response |
File_ReadAt_Response
|
|
2 |
err |
zx/Status
|
File_Resize_Result 严格
在 fuchsia.io/file2.fidl 中定义
序数 | 变体 | 类型 | 说明 |
---|---|---|---|
1 |
response |
File_Resize_Response
|
|
2 |
err |
zx/Status
|
File_Seek_Result 严格
在 fuchsia.io/file2.fidl 中定义
序数 | 变体 | 类型 | 说明 |
---|---|---|---|
1 |
response |
File_Seek_Response
|
|
2 |
err |
zx/Status
|
File_WriteAt_Result 严格
在 fuchsia.io/file2.fidl 中定义
序数 | 变体 | 类型 | 说明 |
---|---|---|---|
1 |
response |
File_WriteAt_Response
|
|
2 |
err |
zx/Status
|
Linkable_LinkInto_Result 严格
在 fuchsia.io/node2.fidl 中定义
序数 | 变体 | 类型 | 说明 |
---|---|---|---|
1 |
response |
Linkable_LinkInto_Response
|
|
2 |
err |
zx/Status
|
Node2_GetAttributes_Result 严格
在 fuchsia.io/node2.fidl 中定义
序数 | 变体 | 类型 | 说明 |
---|---|---|---|
1 |
response |
NodeAttributes2
|
|
2 |
err |
zx/Status
|
Node2_GetExtendedAttribute_Result strict 资源
在 fuchsia.io/node2.fidl 中定义
序数 | 变体 | 类型 | 说明 |
---|---|---|---|
1 |
response |
ExtendedAttributeValue
|
|
2 |
err |
zx/Status
|
Node2_RemoveExtendedAttribute_Result 严格
在 fuchsia.io/node2.fidl 中定义
序数 | 变体 | 类型 | 说明 |
---|---|---|---|
1 |
response |
Node2_RemoveExtendedAttribute_Response
|
|
2 |
err |
zx/Status
|
Node2_SetExtendedAttribute_Result 严格
在 fuchsia.io/node2.fidl 中定义
序数 | 变体 | 类型 | 说明 |
---|---|---|---|
1 |
response |
Node2_SetExtendedAttribute_Response
|
|
2 |
err |
zx/Status
|
Node2_Sync_Result 严格
在 fuchsia.io/node2.fidl 中定义
序数 | 变体 | 类型 | 说明 |
---|---|---|---|
1 |
response |
Node2_Sync_Response
|
|
2 |
err |
zx/Status
|
Node2_UpdateAttributes_Result 严格
在 fuchsia.io/node2.fidl 中定义
序数 | 变体 | 类型 | 说明 |
---|---|---|---|
1 |
response |
Node2_UpdateAttributes_Response
|
|
2 |
err |
zx/Status
|
NodeInfo 已弃用的严格 资源
在 fuchsia.io/node.fidl 中定义
序数 | 变体 | 类型 | 说明 |
---|---|---|---|
1 |
service |
Service
|
连接未提供协议信息。 |
2 |
file |
FileObject
|
连接组成 File。 |
3 |
directory |
DirectoryObject
|
连接构成 Directory。 |
4 |
symlink |
SymlinkObject
|
连接组成 ['Symlink']。 添加日期:18
|
Readable_Read_Result 严格
在 fuchsia.io/file2.fidl 中定义
序数 | 变体 | 类型 | 说明 |
---|---|---|---|
1 |
response |
Readable_Read_Response
|
|
2 |
err |
zx/Status
|
表示灵活 资源
在 fuchsia.io/node2.fidl 中定义
序数 | 变体 | 类型 | 说明 |
---|---|---|---|
1 |
connector |
ConnectorInfo
|
节点的连接器表示形式的辅助数据,用于发现和连接协议。 它支持连接到文件系统服务器在某个路径下导出的任意协议,包括不构成 Node2 的协议。 |
2 |
directory |
DirectoryInfo
|
|
3 |
file |
FileInfo
|
|
4 |
symlink |
SymlinkInfo
|
节点的符号链接表示形式的辅助数据。在表示法中选择此变体意味着连接使用符号链接协议。 请参阅 NodeProtocolKinds.SYMLINK。 添加日期:18
|
Symlink_Describe_Result严格
在 fuchsia.io/symlink.fidl 中定义
序数 | 变体 | 类型 | 说明 |
---|---|---|---|
1 |
response |
SymlinkInfo
|
|
3 |
framework_err |
internal
|
Writable_Write_Result 严格
在 fuchsia.io/file2.fidl 中定义
序数 | 变体 | 类型 | 说明 |
---|---|---|---|
1 |
response |
Writable_Write_Response
|
|
2 |
err |
zx/Status
|
BITS
AllocateMode 灵活
类型:uint32
在 fuchsia.io/file2.fidl 中定义
名称 | 值 | 说明 |
---|---|---|
KEEP_SIZE |
1 | |
UNSHARE_RANGE |
2 | |
PUNCH_HOLE |
4 | |
COLLAPSE_RANGE |
8 | |
ZERO_RANGE |
16 | |
INSERT_RANGE |
32 |
ConnectorFlags flexible
类型:uint64
在 fuchsia.io/directory2.fidl 中定义
名称 | 值 | 说明 |
---|
FileProtocolFlags灵活
类型:uint64
在 fuchsia.io/directory2.fidl 中定义
名称 | 值 | 说明 |
---|---|---|
APPEND |
1 | 以附加模式打开文件,即每次写入之前,连接都应查找到文件末尾。 如果文件不支持附加,应生成 |
TRUNCATE |
2 | 在使用前将对象截断,方法是将其长度设置为 0。要求在连接上直接拥有 Rights.WRITE_BYTES。 如果文件不支持截断,则应生成 |
FileSignal 严格
类型:uint32
在 fuchsia.io/file2.fidl 中定义
名称 | 值 | 说明 |
---|---|---|
清晰易读 |
16777216 | 表示文件已准备好进行读取。 |
可写 |
33554432 | 表示文件已准备好写入。 |
ModeType 严格
类型:uint32
在 fuchsia.io/directory.fidl 中定义
名称 | 值 | 说明 |
---|---|---|
DO_NOT_USE |
2147483648 |
NodeAttributeFlags 严格
类型:uint32
在 fuchsia.io/node.fidl 中定义
用于更新节点的“attributes”字段由“flags”参数指示。
名称 | 值 | 说明 |
---|---|---|
CREATION_TIME |
1 | |
MODIFICATION_TIME |
2 |
NodeAttributesQuery 严格
类型:uint64
在 fuchsia.io/node2.fidl 中定义
名称 | 值 | 说明 |
---|---|---|
协议 |
1 | |
能力 |
2 | |
CONTENT_SIZE |
4 | |
STORAGE_SIZE |
8 | |
LINK_COUNT |
16 | |
ID |
32 | |
CREATION_TIME |
64 | |
MODIFICATION_TIME |
128 | |
模式 |
256 | Posix 属性。 添加日期:18
|
UID |
512 | 添加日期:18
|
GID |
1024 | 添加日期:18
|
RDEV |
2048 | 添加日期:18
|
ACCESS_TIME |
4096 | 添加日期:18
|
CHANGE_TIME |
8192 | 添加日期:18
|
选项 |
16384 | Verity 属性。 添加了:HEAD
|
ROOT_HASH |
32768 | 添加了:HEAD
|
VERITY_ENABLED |
65536 | 添加了:HEAD
|
NodeFlags 柔性
类型:uint64
在 fuchsia.io/directory2.fidl 中定义
名称 | 值 | 说明 |
---|---|---|
GET_REPRESENTATION |
1 | 请求将 Node.OnRepresentation 事件作为协议请求中的第一条消息发送。 这是 fuchsia.unknown/Queryable.Query + 特定协议上固有的 |
NodeProtocolFlags 柔性
类型:uint64
在 fuchsia.io/directory2.fidl 中定义
名称 | 值 | 说明 |
---|---|---|
MUST_BE_DIRECTORY |
1 | 仅当底层对象是目录时,才允许连接。如果尝试打开除目录之外的其他内容,则将导致 |
NodeProtocolKinds 灵活
类型:uint64
在 fuchsia.io/node-protocols.fidl 中定义
打开节点时,它可以有多种受支持的表示法,即使它可能具有固定的基础身份也是如此。
目前,文件通过 File 协议访问,并在使用 GET_REPRESENTATION
打开时发送 Representation.FileInfo。不过,将来我们可能会引入更复杂的 FileV2
协议,或者由专用内核对象支持的更高效的 SuperFastFile
。新客户端可以通过在 NodeProtocolKinds 中指定相应位来请求更高级的表示法,而现有客户端将通过旧表示法继续与节点通信。
NodeProtocolKinds 通过协议协商的形式实现向前兼容性。
这些元素与 Representation 的成员具有一对一的对应关系。
名称 | 值 | 说明 |
---|---|---|
连接器 |
1 | 节点的连接器表示法。 连接将读出节点或目标协议,具体取决于打开期间使用的标志。 |
目录 |
2 | 节点的目录表示法。 连接将说出 Directory 协议。 |
文件 |
4 | 节点的文件表示形式。 连接将说出 File 协议。 |
符号链接 |
8 | 节点的符号链接表示法。 连接将说出 Symlink 协议。 添加了:HEAD
|
OpenFlags 严格
类型:uint32
在 fuchsia.io/directory.fidl 中定义
名称 | 值 | 说明 |
---|---|---|
RIGHT_READABLE |
1 | 可以从目标对象读取数据。 |
RIGHT_WRITABLE |
2 | 可以写入目标对象。 |
RIGHT_EXECUTABLE |
8 | 连接可以映射目标对象可执行文件。 |
创建 |
65536 | 如果该对象不存在,请创建一个。 |
CREATE_IF_ABSENT |
131072 | (使用 Create)如果对象已存在,则失败。 |
TRUNCATE |
262144 | 在使用前截断对象。 |
目录 |
524288 | 断言要打开的对象是一个目录。 如果目标对象不是目录,则返回错误。 |
APPEND |
1048576 | 在所有写入之前,跳转至对象末尾。 |
NODE_REFERENCE |
4194304 | 打开对对象(而不是对象本身)的引用。
将以下标志与
|
描述 |
8388608 | 请求向接口请求发送“OnOpen”事件。 如果打开/克隆成功,该事件将包含一个非 null |
POSIX_WRITABLE |
134217728 | 指定此标志以请求与写入权限处理相关的 POSIX 兼容性。 目前,它只会影响 Open 期间的权限处理情况:
如果省略此标志,则打开会始终使用所请求的权限,如果请求的权限超过了附加到当前连接的权限,操作将失败并显示“访问遭拒”错误。 如果请求连接是只读的,并且请求的权限是只读的,则该标志可能会被服务器忽略,并且不会被转发到下游。这是一个实现细节,对于跨装载点强制执行分层权限来说必不可少,并且应该不会对客户端的预期行为产生任何影响。 |
POSIX_EXECUTABLE |
268435456 | 指定此标志以请求与执行权限处理相关的 POSIX 兼容性。目前,它只会影响 Open 期间的权限处理情况:
如果省略此标志,则打开会始终使用所请求的权限,如果请求的权限超过了附加到当前连接的权限,操作将失败并显示“访问遭拒”错误。 如果请求连接是只读的,并且请求的权限是只读的,则该标志可能会被服务器忽略,并且不会被转发到下游。这是一个实现细节,对于跨装载点强制执行分层权限来说必不可少,并且应该不会对客户端的预期行为产生任何影响。 |
NOT_DIRECTORY |
33554432 | 断言要打开的对象不是目录。 如果目标对象是目录,则返回错误。 |
CLONE_SAME_RIGHTS |
67108864 | 在克隆期间使用新连接时,新连接会继承源连接的权限,无论它是文件还是目录。否则,克隆会尝试使用所请求的权限。将任何 |
BLOCK_DEVICE |
16777216 | 以块存储设备的形式打开目标对象。 |
运营严格
类型:uint64
在 fuchsia.io/rights-abilities.fidl 中定义
权利和能力背后的常见成员定义。某些操作可能仅适用于特定节点类型(例如 Operations.MODIFY_DIRECTORY 仅适用于目录)。
名称 | 值 | 说明 |
---|---|---|
连接 |
1 | 连接到目录中的服务。 |
READ_BYTES |
2 | 读取节点或其子节点的字节内容。 |
WRITE_BYTES |
4 | 向节点或其子节点的字节内容写入数据。 |
执行 |
8 | 执行节点或其子节点的字节内容。 |
GET_ATTRIBUTES |
16 | 读取节点和/或其子节点的属性。 |
UPDATE_ATTRIBUTES |
32 | 更新节点和/或其子节点的属性。 |
枚举 |
64 | 读取目录中的节点列表。 |
移动 |
128 | 从目录打开节点。必须使用 Rights.ENUMERATE 进行指定,因为可以通过打开子项来探测目录内容。 |
MODIFY_DIRECTORY |
256 | 修改目录中的节点列表,例如创建、重命名、关联/解除关联等... 必须使用 Rights.ENUMERATE 进行指定,因为在创建节点期间可以通过名称冲突探测目录内容。 |
SymlinkProtocolFlags灵活
类型:uint64
在 fuchsia.io/directory2.fidl 中定义
名称 | 值 | 说明 |
---|
DisconnectFlags 严格
类型:uint64
在 fuchsia.io/directory2.fidl 中定义
名称 | 值 | 说明 |
---|---|---|
MUST_BE_DIRECTORY |
1 | 设置好后,如果对象不是目录,取消关联将失败(显示 ZX_ERR_NOT_DIR)。 |
VmoFlags 严格
类型:uint32
在 fuchsia.io/file2.fidl 中定义
名称 | 值 | 说明 |
---|---|---|
读取 |
1 | 请求读取 VMO。 |
写入 |
2 | 请求可写入 VMO。 |
执行 |
4 | 请求 VMO 可执行。 |
PRIVATE_CLONE |
65536 | 需要底层 VMO 的写入时复制克隆。如果无法克隆 VMO,请求应失败。不可随 私有克隆至少对 在某些情况下,需要保证文件快照的客户端可以使用 |
SHARED_BUFFER |
131072 | 要求虚拟机能够直接访问文件底层 VMO 的内容。如果无法提供此类 VMO,请求应失败。可能不随 即使请求了 |
WatchMask 严格
类型:uint32
在 fuchsia.io/directory.fidl 中定义
名称 | 值 | 说明 |
---|---|---|
DELETED |
1 | 供 |
已添加 |
2 | 供 |
已移除 |
4 | 供 |
现有 |
8 | 供 |
空闲 |
16 | 供 |
常量
名称 | 值 | 类型 | 说明 |
---|---|---|---|
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_TYPE_BLOCK_DEVICE |
24576
|
uint32 |
|
MODE_TYPE_DIRECTORY |
16384
|
uint32 |
|
MODE_TYPE_FILE |
32768
|
uint32 |
|
MODE_TYPE_MASK |
1044480
|
uint32 |
表示节点类型的位。检查节点类型的规范机制是采用“模式”,按位将其与 |
MODE_TYPE_SERVICE |
65536
|
uint32 |
|
MODE_TYPE_SYMLINK |
40960
|
uint32 |
添加了:HEAD
|
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* 的别名 |
||
SYMLINK_PROTOCOL_NAME | fuchsia.io/Symlink |
String |
添加日期:18
|
W_STAR_DIR | 目录权限别名 w* 的别名 |
||
X_STAR_DIR | 目录权限别名 x* 的别名 |
别名
名称 | 值 | 说明 |
---|---|---|
功能 |
fuchsia.io/Operations |
功能是节点固有的属性。这些参数会指定它支持的操作。 在不支持此操作的节点上调用某项操作会导致 |
ExtendedAttributeName |
vector [MAX_ATTRIBUTE_NAME ] |
扩展属性的名称。不能包含任何 null 字节。除了该上限和大小上限之外,该名称没有特定结构。 添加日期:18
|
ID |
uint64 |
用于标识节点的类型(如果实现支持某种唯一节点 ID 概念)。 唯一性保证客户端通常会呈现一个目录树,该树是将多个后备实现实例组合在一起的结果。一个 ID 仅在相应实例中是唯一的。由于以透明方式转发目录代理,因此它们的边界在 Fuchsia 上是隐式的。客户端在遍历目录树时,如果遇到来自不同后备实例的节点,可能会发现完全相同的 fuchsia.fs/FilesystemInfo.fs_id 字段可用于区分来自不同后备实例的 ID。 |
名称 |
string [MAX_NAME_LENGTH ] |
节点名称(即单个路径组成部分)的类型。例如: 不变量有效的节点名称必须满足以下条件:
|
路径 |
string [MAX_PATH_LENGTH ] |
路径是包含一个或多个组成部分的字符串,以“/”分隔。例如 不变量有效路径必须满足以下条件:
路径应在客户端转换为其规范形式。
例如,客户端应将 |
权利 |
fuchsia.io/Operations |
权限是关联特有的属性。它们会限制可以对连接执行的操作,包括可以被授予新连接的操作。 在没有相应权限的情况下调用操作会导致 |
SymlinkTarget |
vector [MAX_PATH_LENGTH ] |
|
令牌 |
zx/Handle |
用于标识与节点的连接的类型。 它表示一项功能:对具有相关权限的节点的引用。 |
转移 |
vector [MAX_TRANSFER_SIZE ] |
用于读/写操作的字节矢量类型。 |