pub trait FileDescription: Debug + FileDescriptionExt {
// Required method
fn name(&self) -> &'static str;
// Provided methods
fn read<'tcx>(
self: FileDescriptionRef<Self>,
_communicate_allowed: bool,
_ptr: Pointer,
_len: usize,
_ecx: &mut MiriInterpCx<'tcx>,
_finish: DynMachineCallback<'tcx, Result<usize, IoError>>,
) -> InterpResult<'tcx> { ... }
fn write<'tcx>(
self: FileDescriptionRef<Self>,
_communicate_allowed: bool,
_ptr: Pointer,
_len: usize,
_ecx: &mut MiriInterpCx<'tcx>,
_finish: DynMachineCallback<'tcx, Result<usize, IoError>>,
) -> InterpResult<'tcx> { ... }
fn seek<'tcx>(
&self,
_communicate_allowed: bool,
_offset: SeekFrom,
) -> InterpResult<'tcx, Result<u64>> { ... }
fn close<'tcx>(
self,
_communicate_allowed: bool,
_ecx: &mut MiriInterpCx<'tcx>,
) -> InterpResult<'tcx, Result<()>>
where Self: Sized { ... }
fn metadata<'tcx>(&self) -> InterpResult<'tcx, Result<Metadata>> { ... }
fn is_tty(&self, _communicate_allowed: bool) -> bool { ... }
fn as_unix<'tcx>(
&self,
_ecx: &MiriInterpCx<'tcx>,
) -> &dyn UnixFileDescription { ... }
fn get_flags<'tcx>(
&self,
_ecx: &mut MiriInterpCx<'tcx>,
) -> InterpResult<'tcx, Scalar> { ... }
fn set_flags<'tcx>(
&self,
_flag: i32,
_ecx: &mut MiriInterpCx<'tcx>,
) -> InterpResult<'tcx, Scalar> { ... }
}
Expand description
Represents an open file description.
Required Methods§
Provided Methods§
Sourcefn read<'tcx>(
self: FileDescriptionRef<Self>,
_communicate_allowed: bool,
_ptr: Pointer,
_len: usize,
_ecx: &mut MiriInterpCx<'tcx>,
_finish: DynMachineCallback<'tcx, Result<usize, IoError>>,
) -> InterpResult<'tcx>
fn read<'tcx>( self: FileDescriptionRef<Self>, _communicate_allowed: bool, _ptr: Pointer, _len: usize, _ecx: &mut MiriInterpCx<'tcx>, _finish: DynMachineCallback<'tcx, Result<usize, IoError>>, ) -> InterpResult<'tcx>
Reads as much as possible into the given buffer ptr
.
len
indicates how many bytes we should try to read.
When the read is done, finish
will be called. Note that read
itself may return before
that happens! Everything that should happen “after” the read
needs to happen inside
finish
.
Sourcefn write<'tcx>(
self: FileDescriptionRef<Self>,
_communicate_allowed: bool,
_ptr: Pointer,
_len: usize,
_ecx: &mut MiriInterpCx<'tcx>,
_finish: DynMachineCallback<'tcx, Result<usize, IoError>>,
) -> InterpResult<'tcx>
fn write<'tcx>( self: FileDescriptionRef<Self>, _communicate_allowed: bool, _ptr: Pointer, _len: usize, _ecx: &mut MiriInterpCx<'tcx>, _finish: DynMachineCallback<'tcx, Result<usize, IoError>>, ) -> InterpResult<'tcx>
Writes as much as possible from the given buffer ptr
.
len
indicates how many bytes we should try to write.
When the write is done, finish
will be called. Note that write
itself may return before
that happens! Everything that should happen “after” the write
needs to happen inside
finish
.
Sourcefn seek<'tcx>(
&self,
_communicate_allowed: bool,
_offset: SeekFrom,
) -> InterpResult<'tcx, Result<u64>>
fn seek<'tcx>( &self, _communicate_allowed: bool, _offset: SeekFrom, ) -> InterpResult<'tcx, Result<u64>>
Seeks to the given offset (which can be relative to the beginning, end, or current position). Returns the new position from the start of the stream.
Sourcefn close<'tcx>(
self,
_communicate_allowed: bool,
_ecx: &mut MiriInterpCx<'tcx>,
) -> InterpResult<'tcx, Result<()>>where
Self: Sized,
fn close<'tcx>(
self,
_communicate_allowed: bool,
_ecx: &mut MiriInterpCx<'tcx>,
) -> InterpResult<'tcx, Result<()>>where
Self: Sized,
Close the file descriptor.
fn metadata<'tcx>(&self) -> InterpResult<'tcx, Result<Metadata>>
fn is_tty(&self, _communicate_allowed: bool) -> bool
fn as_unix<'tcx>(&self, _ecx: &MiriInterpCx<'tcx>) -> &dyn UnixFileDescription
Sourcefn get_flags<'tcx>(
&self,
_ecx: &mut MiriInterpCx<'tcx>,
) -> InterpResult<'tcx, Scalar>
fn get_flags<'tcx>( &self, _ecx: &mut MiriInterpCx<'tcx>, ) -> InterpResult<'tcx, Scalar>
Implementation of fcntl(F_GETFL) for this FD.
Sourcefn set_flags<'tcx>(
&self,
_flag: i32,
_ecx: &mut MiriInterpCx<'tcx>,
) -> InterpResult<'tcx, Scalar>
fn set_flags<'tcx>( &self, _flag: i32, _ecx: &mut MiriInterpCx<'tcx>, ) -> InterpResult<'tcx, Scalar>
Implementation of fcntl(F_SETFL) for this FD.