


# VmoFile class






    *[<Null safety>](https://dart.dev/null-safety)*



<p>A node which wraps a VMO that can be duplicated when opened.</p>
<p>Reads when opening a <a href="../package-fuchsia_vfs_vfs/VmoFile-class.md">VmoFile</a> as a file are buffered, and repeated reads
will obtain the same information unless the connection is closed between
reads.
A duplicate of the underlying VMO is exposed through <code>Node.Describe</code> when
<a href="../package-fuchsia_vfs_vfs/VmoSharingMode.md">VmoSharingMode</a> is <code>shareDuplicate</code>.</p>



**Inheritance**

- Object
- [Vnode](../package-fuchsia_vfs_vfs/Vnode-class.md)
- [PseudoFile](../package-fuchsia_vfs_vfs/PseudoFile-class.md)
- VmoFile








## Constructors

[VmoFile.readOnly](../package-fuchsia_vfs_vfs/VmoFile/VmoFile.readOnly.md) ([Vmo](../zircon/Vmo-class.md) _vmo, [VmoSharingMode](../package-fuchsia_vfs_vfs/VmoSharingMode.md) _sharingMode)

Constructor for read-only <a href="../zircon/Vmo-class.md">Vmo</a>   


## Properties

##### [hashCode](../package-fuchsia_vfs_vfs/Vnode/hashCode.md) &#8594; int



The hash code for this object.  
_<span class="feature read-only">read-only</span><span class="feature inherited">inherited</span>_



##### [runtimeType](../package-fuchsia_vfs_vfs/Vnode/runtimeType.md) &#8594; Type



A representation of the runtime type of the object.  
_<span class="feature read-only">read-only</span><span class="feature inherited">inherited</span>_





## Methods

##### [close](../package-fuchsia_vfs_vfs/PseudoFile/close.md)() void



Close this node and all of its bindings and children.  
_<span class="feature inherited">inherited</span>_



##### [connect](../package-fuchsia_vfs_vfs/PseudoFile/connect.md)(dynamic flags, int mode, [InterfaceRequest](../package-fidl_fidl/InterfaceRequest-class.md) request, [dynamic parentFlags]) int



Connects to this instance of <a href="../package-fuchsia_vfs_vfs/PseudoFile-class.md">PseudoFile</a> and serves <code>fidl_fuchsia_io.File</code> over fidl.  
_<span class="feature inherited">inherited</span>_



##### [describe2](../package-fuchsia_vfs_vfs/PseudoFile/describe2.md)() dynamic



  
_<span class="feature inherited">inherited</span>_



##### [describeDeprecated](../package-fuchsia_vfs_vfs/VmoFile/describeDeprecated.md)() dynamic



  
_<span class="feature override">override</span>_



##### [filterForNodeReference](../package-fuchsia_vfs_vfs/Vnode/filterForNodeReference.md)(dynamic flags) dynamic



Filter flags when <code>OpenFlags.nodeReference</code> is passed.
This will maintain compatibility with c++ layer.  
_<span class="feature inherited">inherited</span>_



##### [getBackingMemory](../package-fuchsia_vfs_vfs/VmoFile/getBackingMemory.md)(dynamic flags) [Vmo](../zircon/Vmo-class.md)



  
_<span class="feature override">override</span>_



##### [getConnectionInfo](../package-fuchsia_vfs_vfs/VmoFile/getConnectionInfo.md)() dynamic



  
_<span class="feature override">override</span>_



##### [inodeNumber](../package-fuchsia_vfs_vfs/PseudoFile/inodeNumber.md)() int



Inode number as defined in fuchsia.io.  
_<span class="feature inherited">inherited</span>_



##### [noSuchMethod](../package-fuchsia_vfs_vfs/Vnode/noSuchMethod.md)(Invocation invocation) dynamic



Invoked when a non-existent method or property is accessed.  
_<span class="feature inherited">inherited</span>_



##### [open](../package-fuchsia_vfs_vfs/Vnode/open.md)(dynamic flags, int mode, String path, [InterfaceRequest](../package-fidl_fidl/InterfaceRequest-class.md) request, [dynamic parentFlags]) void



This function is called from <code>fidl_fuchsia_io.Directory#open</code>.
This function parses path and opens correct node.  
_<span class="feature inherited">inherited</span>_



##### [sendErrorEvent](../package-fuchsia_vfs_vfs/Vnode/sendErrorEvent.md)(dynamic flags, int status, [InterfaceRequest](../package-fidl_fidl/InterfaceRequest-class.md) request) void



Create a error node to send onOpen event with failure status.  
_<span class="feature inherited">inherited</span>_



##### [toString](../package-fuchsia_vfs_vfs/Vnode/toString.md)() String



A string representation of this object.  
_<span class="feature inherited">inherited</span>_



##### [type](../package-fuchsia_vfs_vfs/PseudoFile/type.md)() dynamic



  
_<span class="feature inherited">inherited</span>_





## Operators

##### [operator ==](../package-fuchsia_vfs_vfs/Vnode/operator_equals.md)(Object other) bool



The equality operator.  
_<span class="feature inherited">inherited</span>_















