pub struct PipeFileObject { /* private fields */ }Implementations§
Source§impl PipeFileObject
impl PipeFileObject
Sourcepub fn splice_from(
&self,
current_task: &CurrentTask,
self_file: &FileHandle,
from: &FileHandle,
maybe_offset: Option<usize>,
len: usize,
non_blocking: bool,
) -> Result<usize, Errno>
pub fn splice_from( &self, current_task: &CurrentTask, self_file: &FileHandle, from: &FileHandle, maybe_offset: Option<usize>, len: usize, non_blocking: bool, ) -> Result<usize, Errno>
Splice from the given file handle to this pipe.
The given file handle must not be a pipe. If you wish to splice between two pipes, use
lock_pipes and Pipe::splice.
Sourcepub fn splice_to(
&self,
current_task: &CurrentTask,
self_file: &FileHandle,
to: &FileHandle,
maybe_offset: Option<usize>,
len: usize,
non_blocking: bool,
) -> Result<usize, Errno>
pub fn splice_to( &self, current_task: &CurrentTask, self_file: &FileHandle, to: &FileHandle, maybe_offset: Option<usize>, len: usize, non_blocking: bool, ) -> Result<usize, Errno>
Splice from this pipe to the given file handle.
The given file handle must not be a pipe. If you wish to splice between two pipes, use
lock_pipes and Pipe::splice.
Sourcepub fn vmsplice_from(
&self,
current_task: &CurrentTask,
self_file: &FileHandle,
iovec: UserBuffers,
non_blocking: bool,
) -> Result<usize, Errno>
pub fn vmsplice_from( &self, current_task: &CurrentTask, self_file: &FileHandle, iovec: UserBuffers, non_blocking: bool, ) -> Result<usize, Errno>
Share the mappings backing the given input buffer into the pipe.
Returns the number of bytes enqueued.
Sourcepub fn vmsplice_to(
&self,
current_task: &CurrentTask,
self_file: &FileHandle,
iovec: UserBuffers,
non_blocking: bool,
) -> Result<usize, Errno>
pub fn vmsplice_to( &self, current_task: &CurrentTask, self_file: &FileHandle, iovec: UserBuffers, non_blocking: bool, ) -> Result<usize, Errno>
Copy data from the pipe to the given output buffer.
Returns the number of bytes transferred.
Sourcepub fn lock_pipes<'a, 'b>(
current_task: &CurrentTask,
file_in: &'a FileHandle,
file_out: &'b FileHandle,
len: usize,
non_blocking: bool,
) -> Result<PipeOperands<'a, 'b>, Errno>
pub fn lock_pipes<'a, 'b>( current_task: &CurrentTask, file_in: &'a FileHandle, file_out: &'b FileHandle, len: usize, non_blocking: bool, ) -> Result<PipeOperands<'a, 'b>, Errno>
Obtain the pipe objects from the given file handles, if they are both pipes.
Returns EINVAL if one (or both) of the given file handles is not a pipe.
Obtains the locks on the pipes in the correct order to avoid deadlocks.
Trait Implementations§
Source§impl FileOps for PipeFileObject
impl FileOps for PipeFileObject
Source§fn is_seekable(&self) -> bool
fn is_seekable(&self) -> bool
Returns whether the file is seekable.
Source§fn seek(
&self,
_file: &FileObject,
_current_task: &CurrentTask,
_current_offset: off_t,
_target: SeekTarget,
) -> Result<off_t, Errno>
fn seek( &self, _file: &FileObject, _current_task: &CurrentTask, _current_offset: off_t, _target: SeekTarget, ) -> Result<off_t, Errno>
Adjust the
current_offset if the file is seekable.Source§fn sync(
&self,
file: &FileObject,
_current_task: &CurrentTask,
) -> Result<(), Errno>
fn sync( &self, file: &FileObject, _current_task: &CurrentTask, ) -> Result<(), Errno>
Syncs cached state associated with the file descriptor to persistent storage. Read more
Source§fn close(self: Box<Self>, file: &FileObjectState, _current_task: &CurrentTask)
fn close(self: Box<Self>, file: &FileObjectState, _current_task: &CurrentTask)
Called when the FileObject is destroyed.
Source§fn read(
&self,
file: &FileObject,
current_task: &CurrentTask,
offset: usize,
data: &mut dyn OutputBuffer,
) -> Result<usize, Errno>
fn read( &self, file: &FileObject, current_task: &CurrentTask, offset: usize, data: &mut dyn OutputBuffer, ) -> Result<usize, Errno>
Read from the file at an offset. If the file does not have persistent offsets (either
directly, or because it is not seekable), offset will be 0 and can be ignored.
Returns the number of bytes read.
Source§fn write(
&self,
file: &FileObject,
current_task: &CurrentTask,
offset: usize,
data: &mut dyn InputBuffer,
) -> Result<usize, Errno>
fn write( &self, file: &FileObject, current_task: &CurrentTask, offset: usize, data: &mut dyn InputBuffer, ) -> Result<usize, Errno>
Write to the file with an offset. If the file does not have persistent offsets (either
directly, or because it is not seekable), offset will be 0 and can be ignored.
Returns the number of bytes written.
Source§fn wait_async(
&self,
file: &FileObject,
_current_task: &CurrentTask,
waiter: &Waiter,
events: FdEvents,
handler: EventHandler,
) -> Option<WaitCanceler>
fn wait_async( &self, file: &FileObject, _current_task: &CurrentTask, waiter: &Waiter, events: FdEvents, handler: EventHandler, ) -> Option<WaitCanceler>
Establish a one-shot, edge-triggered, asynchronous wait for the given FdEvents for the
given file and task. Returns
None if this file does not support blocking waits. Read moreSource§fn query_events(
&self,
file: &FileObject,
_current_task: &CurrentTask,
) -> Result<FdEvents, Errno>
fn query_events( &self, file: &FileObject, _current_task: &CurrentTask, ) -> Result<FdEvents, Errno>
The events currently active on this file. Read more
fn fcntl( &self, file: &FileObject, current_task: &CurrentTask, cmd: u32, arg: u64, ) -> Result<SyscallResult, Errno>
fn ioctl( &self, file: &FileObject, current_task: &CurrentTask, request: u32, arg: SyscallArg, ) -> Result<SyscallResult, Errno>
Source§fn open(
&self,
_file: &FileObject,
_current_task: &CurrentTask,
) -> Result<(), Errno>
fn open( &self, _file: &FileObject, _current_task: &CurrentTask, ) -> Result<(), Errno>
Called when the FileObject is opened/created
Source§fn flush(&self, _file: &FileObject, _current_task: &CurrentTask)
fn flush(&self, _file: &FileObject, _current_task: &CurrentTask)
Called every time close() is called on this file, even if the file is not ready to be
released.
Source§fn has_persistent_offsets(&self) -> bool
fn has_persistent_offsets(&self) -> bool
Returns whether the file has meaningful seek offsets. Returning
false is only
optimization and will makes FileObject never hold the offset lock when calling read and
write.Source§fn writes_update_seek_offset(&self) -> bool
fn writes_update_seek_offset(&self) -> bool
Returns true if
write() operations on the file will update the seek offset.Source§fn data_sync(
&self,
file: &FileObject,
current_task: &CurrentTask,
) -> Result<(), Errno>
fn data_sync( &self, file: &FileObject, current_task: &CurrentTask, ) -> Result<(), Errno>
Syncs cached data, and only enough metadata to retrieve said data, to persistent storage. Read more
Source§fn get_memory(
&self,
_file: &FileObject,
_current_task: &CurrentTask,
_length: Option<usize>,
_prot: ProtectionFlags,
) -> Result<Arc<MemoryObject>, Errno>
fn get_memory( &self, _file: &FileObject, _current_task: &CurrentTask, _length: Option<usize>, _prot: ProtectionFlags, ) -> Result<Arc<MemoryObject>, Errno>
Returns a VMO representing this file. At least the requested protection flags must
be set on the VMO. Reading or writing the VMO must read or write the file. If this is not
possible given the requested protection, an error must be returned.
The
length is a hint for the desired size of the VMO. The returned VMO may be larger or
smaller than the requested length.
This method is typically called by Self::mmap.Source§fn mmap(
&self,
file: &FileObject,
current_task: &CurrentTask,
addr: DesiredAddress,
memory_offset: u64,
length: usize,
prot_flags: ProtectionFlags,
options: MappingOptions,
filename: NamespaceNode,
) -> Result<UserAddress, Errno>
fn mmap( &self, file: &FileObject, current_task: &CurrentTask, addr: DesiredAddress, memory_offset: u64, length: usize, prot_flags: ProtectionFlags, options: MappingOptions, filename: NamespaceNode, ) -> Result<UserAddress, Errno>
Responds to an mmap call. The default implementation calls
Self::get_memory to get a VMO
and then maps it with [crate::mm::MemoryManager::map].
Only implement this trait method if your file needs to control mapping, or record where
a VMO gets mapped.Source§fn readdir(
&self,
_file: &FileObject,
_current_task: &CurrentTask,
_sink: &mut dyn DirentSink,
) -> Result<(), Errno>
fn readdir( &self, _file: &FileObject, _current_task: &CurrentTask, _sink: &mut dyn DirentSink, ) -> Result<(), Errno>
Source§fn to_handle(
&self,
file: &FileObject,
current_task: &CurrentTask,
) -> Result<Option<NullableHandle>, Errno>
fn to_handle( &self, file: &FileObject, current_task: &CurrentTask, ) -> Result<Option<NullableHandle>, Errno>
Return a handle that allows access to this file descritor through the zxio protocols. Read more
fn get_handles( &self, _file: &FileObject, _current_task: &CurrentTask, ) -> Result<Vec<NullableHandle>, Errno>
Source§fn as_thread_group_key(
&self,
_file: &FileObject,
) -> Result<ThreadGroupKey, Errno>
fn as_thread_group_key( &self, _file: &FileObject, ) -> Result<ThreadGroupKey, Errno>
Returns the associated pid_t. Read more
fn readahead( &self, _file: &FileObject, _current_task: &CurrentTask, _offset: usize, _length: usize, ) -> Result<(), Errno>
Source§fn extra_fdinfo(
&self,
_file: &FileHandle,
_current_task: &CurrentTask,
) -> Option<FsString>
fn extra_fdinfo( &self, _file: &FileHandle, _current_task: &CurrentTask, ) -> Option<FsString>
Extra information that is included in the /proc//fdfino/ entry.
Auto Trait Implementations§
impl !RefUnwindSafe for PipeFileObject
impl !UnwindSafe for PipeFileObject
impl Freeze for PipeFileObject
impl Send for PipeFileObject
impl Sync for PipeFileObject
impl Unpin for PipeFileObject
impl UnsafeUnpin for PipeFileObject
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T, D> Encode<Ambiguous1, D> for Twhere
D: ResourceDialect,
impl<T, D> Encode<Ambiguous1, D> for Twhere
D: ResourceDialect,
Source§impl<T, D> Encode<Ambiguous2, D> for Twhere
D: ResourceDialect,
impl<T, D> Encode<Ambiguous2, D> for Twhere
D: ResourceDialect,
§impl<F, N> FidlIntoNative<Box<N>> for Fwhere
F: FidlIntoNative<N>,
impl<F, N> FidlIntoNative<Box<N>> for Fwhere
F: FidlIntoNative<N>,
fn fidl_into_native(self) -> Box<N>
§impl<T> InstanceFromServiceTransport<T> for T
impl<T> InstanceFromServiceTransport<T> for T
§fn from_service_transport(handle: T) -> T
fn from_service_transport(handle: T) -> T
Converts the given service transport handle of type
T to [Self]Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more