Skip to main content

SharedFdTable

Struct SharedFdTable 

Source
pub struct SharedFdTable {
    pub table: Arc<FdTable>,
}
Expand description

A wrapper around FdTable that manages the table’s logical share count.

This type represents the primary reference to the file descriptor table held by a task. Cloning and dropping SharedFdTable increment and decrement the share count of the FdTable, respectively. When the last SharedFdTable for the table is dropped, the table is cleared.

Fields§

§table: Arc<FdTable>

Implementations§

Source§

impl SharedFdTable

Source

pub fn new(table: Arc<FdTable>) -> Self

Source

pub fn unshare(&mut self)

Replaces the wrapped table with a fork that has an independent share count.

Methods from Deref<Target = FdTable>§

Source

pub fn id(&self) -> FdTableId

Returns the FdTableId of the FdTable.

Source

pub fn fork(&self) -> Arc<Self>

Returns new unshared FdTable that is a snapshot of the state of the FdTable.

Source

pub fn exec(&self)

Trims close-on-exec file descriptors from the table.

Source

pub fn insert( &self, current_task: &CurrentTask, fd: FdNumber, file: FileHandle, ) -> Result<(), Errno>

Inserts a file descriptor into the table.

Source

pub fn add( &self, current_task: &CurrentTask, file: FileHandle, flags: FdFlags, ) -> Result<FdNumber, Errno>

Adds a file descriptor to the table.

The file descriptor will be assigned the next available number.

Returns the assigned file descriptor number.

This function is the most common way to add a file descriptor to the table.

Source

pub fn duplicate( &self, current_task: &CurrentTask, oldfd: FdNumber, target: TargetFdNumber, flags: FdFlags, ) -> Result<FdNumber, Errno>

Duplicates a file descriptor.

If target is TargetFdNumber::Minimum, a new FdNumber is allocated. Returns the new FdNumber.

Source

pub fn get_allowing_opath(&self, fd: FdNumber) -> Result<FileHandle, Errno>

Returns the file handle associated with the given file descriptor.

Returns the file handle even if the file was opened with O_PATH.

This operation is uncommon. Most clients should use get instead, which fails if the file was opened with O_PATH.

Source

pub fn get_allowing_opath_with_flags( &self, fd: FdNumber, ) -> Result<(FileHandle, FdFlags), Errno>

Returns the file handle and flags associated with the given file descriptor.

Returns the file handle even if the file was opened with O_PATH.

This operation is uncommon. Most clients should use get instead, which fails if the file was opened with O_PATH.

Source

pub fn get(&self, fd: FdNumber) -> Result<FileHandle, Errno>

Returns the file handle associated with the given file descriptor.

This operation fails if the file was opened with O_PATH.

Source

pub fn close(&self, fd: FdNumber) -> Result<(), Errno>

Closes the file descriptor associated with the given file descriptor.

This operation fails if the file descriptor is not valid.

Source

pub fn get_fd_flags_allowing_opath( &self, fd: FdNumber, ) -> Result<FdFlags, Errno>

Returns the flags associated with the given file descriptor.

Returns the flags even if the file was opened with O_PATH.

Source

pub fn ioctl_fd_flags( &self, current_task: &CurrentTask, fd: FdNumber, request: u32, ) -> Result<(), Errno>

Updates the flags of the specified FD with the requested change.

This operation fails if the file descriptor was opened with O_PATH or is not valid.

Source

pub fn set_fd_flags_allowing_opath( &self, fd: FdNumber, flags: FdFlags, ) -> Result<(), Errno>

Sets the flags associated with the given file descriptor.

This operation fails if the file descriptor is not valid.

Source

pub fn retain<F>(&self, predicate: F)
where F: Fn(FdNumber, &mut FdFlags) -> bool,

Retains only the FDs matching the given predicate.

The predicate is called with the FdNumber and a mutable reference to the FdFlags for each entry in the FdTable. If the predicate returns false, the entry is removed from the FdTable. Otherwise, the FdFlags are updated to the value modified by the predicate.

Source

pub fn get_all_fds(&self) -> Vec<FdNumber>

Returns a vector of all current file descriptors in the table.

Source

pub fn remap<F: Fn(&FileHandle) -> Option<FileHandle>>( &self, _current_task: &CurrentTask, predicate: F, )

Executes predicate(file) => maybe_replacement on every non-empty table entry.

Replaces file with replacement_file in the table when maybe_replacement == Some(replacement_file).

Source

pub fn read<'a>(self: &'a FdTable) -> FdTableReadGuard<'a>

Source

pub fn write<'a>(self: &'a FdTable) -> FdTableWriteGuard<'a>

Trait Implementations§

Source§

impl Clone for SharedFdTable

Source§

fn clone(&self) -> Self

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for SharedFdTable

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for SharedFdTable

Source§

fn default() -> SharedFdTable

Returns the “default value” for a type. Read more
Source§

impl Deref for SharedFdTable

Source§

type Target = FdTable

The resulting type after dereferencing.
Source§

fn deref(&self) -> &Self::Target

Dereferences the value.
Source§

impl Drop for SharedFdTable

Source§

fn drop(&mut self)

Executes the destructor for this type. Read more
Source§

fn pin_drop(self: Pin<&mut Self>)

🔬This is a nightly-only experimental API. (pin_ergonomics)
Execute the destructor for this type, but different to Drop::drop, it requires self to be pinned. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> AsAny for T
where T: Any,

Source§

fn as_any(&self) -> &(dyn Any + 'static)

Source§

fn type_name(&self) -> &'static str

Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> DynClone for T
where T: Clone,

Source§

fn __clone_box(&self, _: Private) -> *mut ()

Source§

impl<T, D> Encode<Ambiguous1, D> for T
where D: ResourceDialect,

Source§

unsafe fn encode( self, _encoder: &mut Encoder<'_, D>, _offset: usize, _depth: Depth, ) -> Result<(), Error>

Encodes the object into the encoder’s buffers. Any handles stored in the object are swapped for Handle::INVALID. Read more
Source§

impl<T, D> Encode<Ambiguous2, D> for T
where D: ResourceDialect,

Source§

unsafe fn encode( self, _encoder: &mut Encoder<'_, D>, _offset: usize, _depth: Depth, ) -> Result<(), Error>

Encodes the object into the encoder’s buffers. Any handles stored in the object are swapped for Handle::INVALID. Read more
§

impl<F, N> FidlIntoNative<Box<N>> for F
where F: FidlIntoNative<N>,

§

fn fidl_into_native(self) -> Box<N>

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> InstanceFromServiceTransport<T> for T

§

fn from_service_transport(handle: T) -> T

Converts the given service transport handle of type T to [Self]
Source§

impl<T, U> Into32<U> for T
where U: MultiArchFrom<T>,

Source§

fn into_32(self) -> U

Source§

impl<T, U> Into64<U> for T
where U: MultiArchFrom<T>,

Source§

fn into_64(self) -> U

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoAny for T
where T: 'static + Send + Sync,

Source§

fn into_any(self: Arc<T>) -> Arc<dyn Any + Sync + Send>

Cast the given object into a dyn std::any::Any.
Source§

impl<T> IntoEither for T

Source§

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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

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
§

impl<T, U> IntoExt<U> for T
where U: FromExt<T>,

§

fn into_ext(self) -> U

Performs the conversion.
Source§

impl<T, U> IntoFidl<U> for T
where U: FromFidl<T>,

Source§

fn into_fidl(self) -> U

Source§

impl<T, U> MultiArchFrom<T> for U
where U: From<T>,

Source§

fn from_64(value: T) -> U

Source§

fn from_32(value: T) -> U

§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<P, T> Receiver for P
where P: Deref<Target = T> + ?Sized, T: ?Sized,

Source§

type Target = T

🔬This is a nightly-only experimental API. (arbitrary_self_types)
The target type on which the method may be called.
§

impl<E> RunsTransport<Mpsc> for E

§

impl<E> RunsTransport<Mpsc> for E
where E: RunsTransport<Mpsc>,

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<T, U> TryIntoExt<U> for T
where U: TryFromExt<T>,

§

type Error = <U as TryFromExt<T>>::Error

§

fn try_into_ext(self) -> Result<U, <T as TryIntoExt<U>>::Error>

Tries to perform the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<St> WithTag for St

§

fn tagged<T>(self, tag: T) -> Tagged<T, St>

Produce a new stream from this one which yields item tupled with a constant tag