pub struct Dir(/* private fields */);
Expand description
An open directory.
This is a lower-level interface than std::fs::ReadDir
. Notable differences:
- can be opened from a file descriptor (as returned by
openat
, perhaps before knowing if the path represents a file or directory). - implements
AsRawFd
, so it can be passed tofstat
,openat
, etc. The file descriptor continues to be owned by theDir
, so callers must not keep aRawFd
after theDir
is dropped. - can be iterated through multiple times without closing and reopening the file descriptor. Each iteration rewinds when finished.
- returns entries for
.
(current directory) and..
(parent directory). - returns entries’ names as a
CStr
(no allocation or conversion beyond whatever libc does).
Implementations§
Source§impl Dir
impl Dir
Sourcepub fn open<P: ?Sized + NixPath>(
path: &P,
oflag: OFlag,
mode: Mode,
) -> Result<Self>
pub fn open<P: ?Sized + NixPath>( path: &P, oflag: OFlag, mode: Mode, ) -> Result<Self>
Opens the given path as with fcntl::open
.
Sourcepub fn openat<P: ?Sized + NixPath>(
dirfd: RawFd,
path: &P,
oflag: OFlag,
mode: Mode,
) -> Result<Self>
pub fn openat<P: ?Sized + NixPath>( dirfd: RawFd, path: &P, oflag: OFlag, mode: Mode, ) -> Result<Self>
Opens the given path as with fcntl::openat
.
Sourcepub fn from<F: IntoRawFd>(fd: F) -> Result<Self>
pub fn from<F: IntoRawFd>(fd: F) -> Result<Self>
Converts from a descriptor-based object, closing the descriptor on success or failure.
Trait Implementations§
Source§impl IntoIterator for Dir
impl IntoIterator for Dir
Source§fn into_iter(self) -> Self::IntoIter
fn into_iter(self) -> Self::IntoIter
Creates a owning iterator, that is, one that takes ownership of the
Dir
. The Dir
cannot be used after calling this. This can be useful
when you have a function that both creates a Dir
instance and returns
an Iterator
.
Example:
use nix::{dir::Dir, fcntl::OFlag, sys::stat::Mode};
use std::{iter::Iterator, string::String};
fn ls_upper(dirname: &str) -> impl Iterator<Item=String> {
let d = Dir::open(dirname, OFlag::O_DIRECTORY, Mode::S_IXUSR).unwrap();
d.into_iter().map(|x| x.unwrap().file_name().as_ref().to_string_lossy().to_ascii_uppercase())
}
Source§type IntoIter = OwningIter
type IntoIter = OwningIter
Which kind of iterator are we turning this into?
impl Eq for Dir
impl Send for Dir
impl StructuralPartialEq for Dir
Auto Trait Implementations§
impl Freeze for Dir
impl RefUnwindSafe for Dir
impl !Sync for Dir
impl Unpin for Dir
impl UnwindSafe for Dir
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