Skip to main content

Dir

Struct Dir 

Source
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 AsFd, so it can be passed to fstat, openat, etc. The file descriptor continues to be owned by the Dir, so callers must not keep a RawFd after the Dir 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).

§Examples

Traverse the current directory, and print entries’ names:

use nix::dir::Dir;
use nix::fcntl::OFlag;
use nix::sys::stat::Mode;

let mut cwd = Dir::open(".", OFlag::O_RDONLY | OFlag::O_CLOEXEC, Mode::empty()).unwrap();
for res_entry in cwd.iter() {
    let entry = res_entry.unwrap();
    println!("File name: {}", entry.file_name().to_string_lossy());
}

Implementations§

Source§

impl Dir

Source

pub fn open<P: ?Sized + NixPath>( path: &P, oflag: OFlag, mode: Mode, ) -> Result<Self>

Opens the given path as with fcntl::open.

Source

pub fn openat<Fd: AsFd, P: ?Sized + NixPath>( dirfd: Fd, path: &P, oflag: OFlag, mode: Mode, ) -> Result<Self>

Opens the given path as with fcntl::openat.

Source

pub unsafe fn from<F: IntoRawFd>(fd: F) -> Result<Self>

👎Deprecated since 0.30.0:

Deprecate this since it is not I/O-safe, use from_fd instead.

Converts from a descriptor-based object, closing the descriptor on success or failure.

§Safety

It is only safe if fd is an owned file descriptor.

Source

pub fn from_fd(fd: OwnedFd) -> Result<Self>

Converts from a file descriptor, closing it on failure.

§Examples

ENOTDIR would be returned if fd does not refer to a directory:

use std::os::fd::OwnedFd;
use nix::dir::Dir;

let temp_file = tempfile::tempfile().unwrap();
let temp_file_fd: OwnedFd = temp_file.into();
let never = Dir::from_fd(temp_file_fd).unwrap();
Source

pub fn iter(&mut self) -> Iter<'_>

Returns an iterator of Result<Entry> which rewinds when finished.

Trait Implementations§

Source§

impl AsFd for Dir

Source§

fn as_fd(&self) -> BorrowedFd<'_>

Borrows the file descriptor. Read more
Source§

impl AsRawFd for Dir

Source§

fn as_raw_fd(&self) -> RawFd

Extracts the raw file descriptor. Read more
Source§

impl Debug for Dir

Source§

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

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

impl Drop for Dir

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

impl Eq for Dir

Source§

impl Hash for Dir

Source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · Source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
Source§

impl IntoIterator for Dir

Source§

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 Item = Result<Entry, Errno>

The type of the elements being iterated over.
Source§

type IntoIter = OwningIter

Which kind of iterator are we turning this into?
Source§

impl PartialEq for Dir

Source§

fn eq(&self, other: &Dir) -> bool

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Inequality operator !=. Read more
Source§

impl Send for Dir

Source§

impl StructuralPartialEq for Dir

Auto Trait Implementations§

§

impl !Sync for Dir

§

impl Freeze for Dir

§

impl RefUnwindSafe for Dir

§

impl Unpin for Dir

§

impl UnsafeUnpin for Dir

§

impl UnwindSafe for Dir

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> 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> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

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, 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.