pub struct TmpFileObject {
node: Arc<TmpNode>,
position: RwLock<u64>,
device_guard: Option<Arc<dyn Device>>,
socket_ref: Option<Arc<dyn SocketObject>>,
mmap_backing: RwLock<Option<Box<[Page]>>>,
mmap_backing_len: Mutex<usize>,
mmap_ranges: RwLock<BTreeMap<usize, MmapRange>>,
}Expand description
File object for TmpFS operations
TmpFileObject represents an open file or directory in TmpFS.
It maintains the current file position and, for device files, an optional device guard. For socket files, it maintains a reference to the socket object.
Fields§
§node: Arc<TmpNode>Reference to the TmpNode
position: RwLock<u64>Current file position
device_guard: Option<Arc<dyn Device>>Optional device guard for device files
socket_ref: Option<Arc<dyn SocketObject>>Optional socket reference for socket files
mmap_backing: RwLock<Option<Box<[Page]>>>Page-aligned backing for private mmap operations
mmap_backing_len: Mutex<usize>Byte length of the mmap backing (file size snapshot)
mmap_ranges: RwLock<BTreeMap<usize, MmapRange>>Active mmap ranges keyed by starting virtual address
Implementations§
Source§impl TmpFileObject
impl TmpFileObject
Sourcepub fn new_regular(node: Arc<TmpNode>) -> Self
pub fn new_regular(node: Arc<TmpNode>) -> Self
Create a new file object for regular files
Sourcepub fn new_directory(node: Arc<TmpNode>) -> Self
pub fn new_directory(node: Arc<TmpNode>) -> Self
Create a new file object for directories
Sourcepub fn new_device(node: Arc<TmpNode>, info: DeviceFileInfo) -> Self
pub fn new_device(node: Arc<TmpNode>, info: DeviceFileInfo) -> Self
Create a new file object for device files
Sourcepub fn new_socket(node: Arc<TmpNode>, info: SocketFileInfo) -> Self
pub fn new_socket(node: Arc<TmpNode>, info: SocketFileInfo) -> Self
Create a new file object for socket files
fn ensure_mmap_backing( &self, file_size: usize, required_size: usize, ) -> Result<(), StreamError>
fn read_device(&self, buffer: &mut [u8]) -> Result<usize, FileSystemError>
fn read_regular_file(&self, buffer: &mut [u8]) -> Result<usize, FileSystemError>
fn write_device(&self, buffer: &[u8]) -> Result<usize, FileSystemError>
fn write_regular_file(&self, buffer: &[u8]) -> Result<usize, FileSystemError>
fn read_socket(&self, buffer: &mut [u8]) -> Result<usize, StreamError>
fn write_socket(&self, buffer: &[u8]) -> Result<usize, StreamError>
Trait Implementations§
Source§impl ControlOps for TmpFileObject
impl ControlOps for TmpFileObject
Source§impl FileObject for TmpFileObject
impl FileObject for TmpFileObject
Source§fn read_at(&self, offset: u64, buffer: &mut [u8]) -> Result<usize, StreamError>
fn read_at(&self, offset: u64, buffer: &mut [u8]) -> Result<usize, StreamError>
Read data from a specific offset without changing internal position Read more
Source§fn write_at(&self, offset: u64, buffer: &[u8]) -> Result<usize, StreamError>
fn write_at(&self, offset: u64, buffer: &[u8]) -> Result<usize, StreamError>
Write data to a specific offset without changing internal position Read more
Source§fn seek(&self, pos: SeekFrom) -> Result<u64, StreamError>
fn seek(&self, pos: SeekFrom) -> Result<u64, StreamError>
Seek to a position in the file stream
Source§fn metadata(&self) -> Result<FileMetadata, StreamError>
fn metadata(&self) -> Result<FileMetadata, StreamError>
Get metadata about the file
Source§fn truncate(&self, size: u64) -> Result<(), StreamError>
fn truncate(&self, size: u64) -> Result<(), StreamError>
Truncate the file to the specified size Read more
fn as_any(&self) -> &dyn Any
Source§fn sync(&self) -> Result<(), StreamError>
fn sync(&self) -> Result<(), StreamError>
Synchronize file content to storage Read more
Source§impl MemoryMappingOps for TmpFileObject
impl MemoryMappingOps for TmpFileObject
Source§fn get_mapping_info(
&self,
offset: usize,
length: usize,
) -> Result<(usize, usize, bool), &'static str>
fn get_mapping_info( &self, offset: usize, length: usize, ) -> Result<(usize, usize, bool), &'static str>
Get mapping information for a region of the object Read more
Source§fn get_mapping_info_with(
&self,
offset: usize,
length: usize,
is_shared: bool,
) -> Result<(usize, usize, bool), &'static str>
fn get_mapping_info_with( &self, offset: usize, length: usize, is_shared: bool, ) -> Result<(usize, usize, bool), &'static str>
Get mapping information with sharing intent. Read more
Source§fn on_mapped(&self, vaddr: usize, _paddr: usize, length: usize, offset: usize)
fn on_mapped(&self, vaddr: usize, _paddr: usize, length: usize, offset: usize)
Notification that a mapping has been created Read more
Source§fn on_unmapped(&self, vaddr: usize, _length: usize)
fn on_unmapped(&self, vaddr: usize, _length: usize)
Notification that a mapping has been removed Read more
Source§fn supports_mmap(&self) -> bool
fn supports_mmap(&self) -> bool
Check if memory mapping is supported Read more
fn resolve_fault( &self, access: &AccessKind, map: &VirtualMemoryMap, ) -> Result<ResolveFaultResult, ResolveFaultError>
Source§fn mmap_owner_name(&self) -> String
fn mmap_owner_name(&self) -> String
Diagnostic helper: return a short owner name for logging Read more
Source§impl PageCacheCapable for TmpFileObject
impl PageCacheCapable for TmpFileObject
Source§impl Selectable for TmpFileObject
impl Selectable for TmpFileObject
Source§fn wait_until_ready(
&self,
_interest: ReadyInterest,
_trapframe: &mut Trapframe,
_timeout_ticks: Option<u64>,
) -> SelectWaitOutcome
fn wait_until_ready( &self, _interest: ReadyInterest, _trapframe: &mut Trapframe, _timeout_ticks: Option<u64>, ) -> SelectWaitOutcome
Block the current task using the provided trapframe until the interest
becomes ready or the optional timeout (in ticks) expires. Read more
Source§fn current_ready(&self, interest: ReadyInterest) -> ReadySet
fn current_ready(&self, interest: ReadyInterest) -> ReadySet
Return current readiness for the given interest set.
Source§fn set_nonblocking(&self, _enabled: bool)
fn set_nonblocking(&self, _enabled: bool)
Enable or disable non-blocking I/O semantics on this object. Read more
Source§fn is_nonblocking(&self) -> bool
fn is_nonblocking(&self) -> bool
Query whether non-blocking I/O semantics are enabled on this object.
Source§impl StreamOps for TmpFileObject
impl StreamOps for TmpFileObject
Source§fn read(&self, buffer: &mut [u8]) -> Result<usize, StreamError>
fn read(&self, buffer: &mut [u8]) -> Result<usize, StreamError>
Read data from the stream
Source§fn write(&self, buffer: &[u8]) -> Result<usize, StreamError>
fn write(&self, buffer: &[u8]) -> Result<usize, StreamError>
Write data to the stream