pub struct Dir { /* private fields */ }
Expand description
A reference to an open directory on a filesystem.
This does not directly correspond to anything in std
, however its methods
correspond to the functions in std::fs
and the constructor methods for
std::fs::File
.
Unlike std::fs
, this API’s canonicalize
returns a relative path since
absolute paths don’t interoperate well with the capability model.
Implementations§
source§impl Dir
impl Dir
sourcepub fn from_std_file(std_file: File) -> Self
pub fn from_std_file(std_file: File) -> Self
Constructs a new instance of Self
from the given std::fs::File
.
To prevent race conditions on Windows, the file must be opened without
FILE_SHARE_DELETE
.
This grants access the resources the std::fs::File
instance already
has access to.
Examples found in repository?
More examples
106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704
pub fn open_dir<P: AsRef<Path>>(&self, path: P) -> io::Result<Self> {
let dir = open_dir(&self.std_file, path.as_ref())?;
Ok(Self::from_std_file(dir))
}
/// Creates a new, empty directory at the provided path.
///
/// This corresponds to [`std::fs::create_dir`], but only accesses paths
/// relative to `self`.
#[inline]
pub fn create_dir<P: AsRef<Path>>(&self, path: P) -> io::Result<()> {
self._create_dir_one(path.as_ref(), &DirOptions::new())
}
/// Recursively create a directory and all of its parent components if they
/// are missing.
///
/// This corresponds to [`std::fs::create_dir_all`], but only accesses
/// paths relative to `self`.
#[inline]
pub fn create_dir_all<P: AsRef<Path>>(&self, path: P) -> io::Result<()> {
self._create_dir_all(path.as_ref(), &DirOptions::new())
}
/// Creates the specified directory with the options configured in this
/// builder.
///
/// This corresponds to [`std::fs::DirBuilder::create`].
#[cfg(not(target_os = "wasi"))]
#[inline]
pub fn create_dir_with<P: AsRef<Path>>(
&self,
path: P,
dir_builder: &DirBuilder,
) -> io::Result<()> {
let options = dir_builder.options();
if dir_builder.is_recursive() {
self._create_dir_all(path.as_ref(), options)
} else {
self._create_dir_one(path.as_ref(), options)
}
}
fn _create_dir_one(&self, path: &Path, dir_options: &DirOptions) -> io::Result<()> {
create_dir(&self.std_file, path, dir_options)
}
fn _create_dir_all(&self, path: &Path, dir_options: &DirOptions) -> io::Result<()> {
if path == Path::new("") {
return Ok(());
}
match self._create_dir_one(path, dir_options) {
Ok(()) => return Ok(()),
Err(ref e) if e.kind() == io::ErrorKind::NotFound => {}
Err(_) if self.is_dir(path) => return Ok(()),
Err(e) => return Err(e),
}
match path.parent() {
Some(p) => self._create_dir_all(p, dir_options)?,
None => {
return Err(io::Error::new(
io::ErrorKind::Other,
"failed to create whole tree",
))
}
}
match self._create_dir_one(path, dir_options) {
Ok(()) => Ok(()),
Err(_) if self.is_dir(path) => Ok(()),
Err(e) => Err(e),
}
}
/// Opens a file in write-only mode.
///
/// This corresponds to [`std::fs::File::create`], but only accesses paths
/// relative to `self`.
#[inline]
pub fn create<P: AsRef<Path>>(&self, path: P) -> io::Result<File> {
self.open_with(
path,
OpenOptions::new().write(true).create(true).truncate(true),
)
}
/// Returns the canonical form of a path with all intermediate components
/// normalized and symbolic links resolved.
///
/// This corresponds to [`std::fs::canonicalize`], but instead of returning
/// an absolute path, returns a path relative to the directory
/// represented by `self`.
#[inline]
pub fn canonicalize<P: AsRef<Path>>(&self, path: P) -> io::Result<PathBuf> {
canonicalize(&self.std_file, path.as_ref())
}
/// Copies the contents of one file to another. This function will also
/// copy the permission bits of the original file to the destination
/// file.
///
/// This corresponds to [`std::fs::copy`], but only accesses paths
/// relative to `self`.
#[inline]
pub fn copy<P: AsRef<Path>, Q: AsRef<Path>>(
&self,
from: P,
to_dir: &Self,
to: Q,
) -> io::Result<u64> {
copy(&self.std_file, from.as_ref(), &to_dir.std_file, to.as_ref())
}
/// Creates a new hard link on a filesystem.
///
/// This corresponds to [`std::fs::hard_link`], but only accesses paths
/// relative to `self`.
#[inline]
pub fn hard_link<P: AsRef<Path>, Q: AsRef<Path>>(
&self,
src: P,
dst_dir: &Self,
dst: Q,
) -> io::Result<()> {
hard_link(
&self.std_file,
src.as_ref(),
&dst_dir.std_file,
dst.as_ref(),
)
}
/// Given a path, query the file system to get information about a file,
/// directory, etc.
///
/// This corresponds to [`std::fs::metadata`], but only accesses paths
/// relative to `self`.
#[inline]
pub fn metadata<P: AsRef<Path>>(&self, path: P) -> io::Result<cap_primitives::fs::Metadata> {
stat(&self.std_file, path.as_ref(), FollowSymlinks::Yes)
}
/// Queries metadata about the underlying directory.
///
/// This is similar to [`std::fs::File::metadata`], but for `Dir` rather
/// than for `File`.
#[inline]
pub fn dir_metadata(&self) -> io::Result<Metadata> {
Metadata::from_file(&self.std_file)
}
/// Returns an iterator over the entries within `self`.
#[inline]
pub fn entries(&self) -> io::Result<ReadDir> {
read_base_dir(&self.std_file).map(|inner| ReadDir { inner })
}
/// Returns an iterator over the entries within a directory.
///
/// This corresponds to [`std::fs::read_dir`], but only accesses paths
/// relative to `self`.
#[inline]
pub fn read_dir<P: AsRef<Path>>(&self, path: P) -> io::Result<ReadDir> {
read_dir(&self.std_file, path.as_ref()).map(|inner| ReadDir { inner })
}
/// Read the entire contents of a file into a bytes vector.
///
/// This corresponds to [`std::fs::read`], but only accesses paths
/// relative to `self`.
#[inline]
pub fn read<P: AsRef<Path>>(&self, path: P) -> io::Result<Vec<u8>> {
let mut file = self.open(path)?;
let mut bytes = Vec::with_capacity(initial_buffer_size(&file));
file.read_to_end(&mut bytes)?;
Ok(bytes)
}
/// Reads a symbolic link, returning the file that the link points to.
///
/// This corresponds to [`std::fs::read_link`], but only accesses paths
/// relative to `self`.
#[inline]
pub fn read_link<P: AsRef<Path>>(&self, path: P) -> io::Result<PathBuf> {
read_link(&self.std_file, path.as_ref())
}
/// Read the entire contents of a file into a string.
///
/// This corresponds to [`std::fs::read_to_string`], but only accesses
/// paths relative to `self`.
#[inline]
pub fn read_to_string<P: AsRef<Path>>(&self, path: P) -> io::Result<String> {
let mut s = String::new();
self.open(path)?.read_to_string(&mut s)?;
Ok(s)
}
/// Removes an empty directory.
///
/// This corresponds to [`std::fs::remove_dir`], but only accesses paths
/// relative to `self`.
#[inline]
pub fn remove_dir<P: AsRef<Path>>(&self, path: P) -> io::Result<()> {
remove_dir(&self.std_file, path.as_ref())
}
/// Removes a directory at this path, after removing all its contents. Use
/// carefully!
///
/// This corresponds to [`std::fs::remove_dir_all`], but only accesses
/// paths relative to `self`.
#[inline]
pub fn remove_dir_all<P: AsRef<Path>>(&self, path: P) -> io::Result<()> {
remove_dir_all(&self.std_file, path.as_ref())
}
/// Remove the directory referenced by `self` and consume `self`.
///
/// Even though this implementation works in terms of handles as much as
/// possible, removal is not guaranteed to be atomic with respect to a
/// concurrent rename of the directory.
#[inline]
pub fn remove_open_dir(self) -> io::Result<()> {
remove_open_dir(self.std_file)
}
/// Removes the directory referenced by `self`, after removing all its
/// contents, and consume `self`. Use carefully!
///
/// Even though this implementation works in terms of handles as much as
/// possible, removal is not guaranteed to be atomic with respect to a
/// concurrent rename of the directory.
#[inline]
pub fn remove_open_dir_all(self) -> io::Result<()> {
remove_open_dir_all(self.std_file)
}
/// Removes a file from a filesystem.
///
/// This corresponds to [`std::fs::remove_file`], but only accesses paths
/// relative to `self`.
#[inline]
pub fn remove_file<P: AsRef<Path>>(&self, path: P) -> io::Result<()> {
remove_file(&self.std_file, path.as_ref())
}
/// Rename a file or directory to a new name, replacing the original file
/// if to already exists.
///
/// This corresponds to [`std::fs::rename`], but only accesses paths
/// relative to `self`.
#[inline]
pub fn rename<P: AsRef<Path>, Q: AsRef<Path>>(
&self,
from: P,
to_dir: &Self,
to: Q,
) -> io::Result<()> {
rename(&self.std_file, from.as_ref(), &to_dir.std_file, to.as_ref())
}
/// Changes the permissions found on a file or a directory.
///
/// This corresponds to [`std::fs::set_permissions`], but only accesses
/// paths relative to `self`. Also, on some platforms, this function
/// may fail if the file or directory cannot be opened for reading or
/// writing first.
#[cfg(not(target_os = "wasi"))]
#[inline]
pub fn set_permissions<P: AsRef<Path>>(&self, path: P, perm: Permissions) -> io::Result<()> {
set_permissions(&self.std_file, path.as_ref(), perm)
}
/// Query the metadata about a file without following symlinks.
///
/// This corresponds to [`std::fs::symlink_metadata`], but only accesses
/// paths relative to `self`.
#[inline]
pub fn symlink_metadata<P: AsRef<Path>>(&self, path: P) -> io::Result<Metadata> {
stat(&self.std_file, path.as_ref(), FollowSymlinks::No)
}
/// Write a slice as the entire contents of a file.
///
/// This corresponds to [`std::fs::write`], but only accesses paths
/// relative to `self`.
#[inline]
pub fn write<P: AsRef<Path>, C: AsRef<[u8]>>(&self, path: P, contents: C) -> io::Result<()> {
let mut file = self.create(path)?;
file.write_all(contents.as_ref())
}
/// Creates a new symbolic link on a filesystem.
///
/// The `original` argument provides the target of the symlink. The `link`
/// argument provides the name of the created symlink.
///
/// Despite the argument ordering, `original` is not resolved relative to
/// `self` here. `link` is resolved relative to `self`, and `original` is
/// not resolved within this function.
///
/// The `link` path is resolved when the symlink is dereferenced, relative
/// to the directory that contains it.
///
/// This corresponds to [`std::os::unix::fs::symlink`], but only accesses
/// paths relative to `self`.
///
/// [`std::os::unix::fs::symlink`]: https://doc.rust-lang.org/std/os/unix/fs/fn.symlink.html
#[cfg(not(windows))]
#[inline]
pub fn symlink<P: AsRef<Path>, Q: AsRef<Path>>(&self, original: P, link: Q) -> io::Result<()> {
symlink(original.as_ref(), &self.std_file, link.as_ref())
}
/// Creates a new file symbolic link on a filesystem.
///
/// The `original` argument provides the target of the symlink. The `link`
/// argument provides the name of the created symlink.
///
/// Despite the argument ordering, `original` is not resolved relative to
/// `self` here. `link` is resolved relative to `self`, and `original` is
/// not resolved within this function.
///
/// The `link` path is resolved when the symlink is dereferenced, relative
/// to the directory that contains it.
///
/// This corresponds to [`std::os::windows::fs::symlink_file`], but only
/// accesses paths relative to `self`.
///
/// [`std::os::windows::fs::symlink_file`]: https://doc.rust-lang.org/std/os/windows/fs/fn.symlink_file.html
#[cfg(windows)]
#[inline]
pub fn symlink_file<P: AsRef<Path>, Q: AsRef<Path>>(
&self,
original: P,
link: Q,
) -> io::Result<()> {
symlink_file(original.as_ref(), &self.std_file, link.as_ref())
}
/// Creates a new directory symlink on a filesystem.
///
/// The `original` argument provides the target of the symlink. The `link`
/// argument provides the name of the created symlink.
///
/// Despite the argument ordering, `original` is not resolved relative to
/// `self` here. `link` is resolved relative to `self`, and `original` is
/// not resolved within this function.
///
/// The `link` path is resolved when the symlink is dereferenced, relative
/// to the directory that contains it.
///
/// This corresponds to [`std::os::windows::fs::symlink_dir`], but only
/// accesses paths relative to `self`.
///
/// [`std::os::windows::fs::symlink_dir`]: https://doc.rust-lang.org/std/os/windows/fs/fn.symlink_dir.html
#[cfg(windows)]
#[inline]
pub fn symlink_dir<P: AsRef<Path>, Q: AsRef<Path>>(
&self,
original: P,
link: Q,
) -> io::Result<()> {
symlink_dir(original.as_ref(), &self.std_file, link.as_ref())
}
/// Creates a new `UnixListener` bound to the specified socket.
///
/// This corresponds to [`std::os::unix::net::UnixListener::bind`], but
/// only accesses paths relative to `self`.
///
/// XXX: This function is not yet implemented.
///
/// [`std::os::unix::net::UnixListener::bind`]: https://doc.rust-lang.org/std/os/unix/net/struct.UnixListener.html#method.bind
#[cfg(unix)]
#[inline]
pub fn bind_unix_listener<P: AsRef<Path>>(&self, path: P) -> io::Result<UnixListener> {
todo!(
"Dir::bind_unix_listener({:?}, {})",
self.std_file,
path.as_ref().display()
)
}
/// Connects to the socket named by path.
///
/// This corresponds to [`std::os::unix::net::UnixStream::connect`], but
/// only accesses paths relative to `self`.
///
/// XXX: This function is not yet implemented.
///
/// [`std::os::unix::net::UnixStream::connect`]: https://doc.rust-lang.org/std/os/unix/net/struct.UnixStream.html#method.connect
#[cfg(unix)]
#[inline]
pub fn connect_unix_stream<P: AsRef<Path>>(&self, path: P) -> io::Result<UnixStream> {
todo!(
"Dir::connect_unix_stream({:?}, {})",
self.std_file,
path.as_ref().display()
)
}
/// Creates a Unix datagram socket bound to the given path.
///
/// This corresponds to [`std::os::unix::net::UnixDatagram::bind`], but
/// only accesses paths relative to `self`.
///
/// XXX: This function is not yet implemented.
///
/// [`std::os::unix::net::UnixDatagram::bind`]: https://doc.rust-lang.org/std/os/unix/net/struct.UnixDatagram.html#method.bind
#[cfg(unix)]
#[inline]
pub fn bind_unix_datagram<P: AsRef<Path>>(&self, path: P) -> io::Result<UnixDatagram> {
todo!(
"Dir::bind_unix_datagram({:?}, {})",
self.std_file,
path.as_ref().display()
)
}
/// Connects the socket to the specified address.
///
/// This corresponds to [`std::os::unix::net::UnixDatagram::connect`], but
/// only accesses paths relative to `self`.
///
/// XXX: This function is not yet implemented.
///
/// [`std::os::unix::net::UnixDatagram::connect`]: https://doc.rust-lang.org/std/os/unix/net/struct.UnixDatagram.html#method.connect
#[cfg(unix)]
#[inline]
pub fn connect_unix_datagram<P: AsRef<Path>>(
&self,
_unix_datagram: &UnixDatagram,
path: P,
) -> io::Result<()> {
todo!(
"Dir::connect_unix_datagram({:?}, {})",
self.std_file,
path.as_ref().display()
)
}
/// Sends data on the socket to the specified address.
///
/// This corresponds to [`std::os::unix::net::UnixDatagram::send_to`], but
/// only accesses paths relative to `self`.
///
/// XXX: This function is not yet implemented.
///
/// [`std::os::unix::net::UnixDatagram::send_to`]: https://doc.rust-lang.org/std/os/unix/net/struct.UnixDatagram.html#method.send_to
#[cfg(unix)]
#[inline]
pub fn send_to_unix_datagram_addr<P: AsRef<Path>>(
&self,
_unix_datagram: &UnixDatagram,
buf: &[u8],
path: P,
) -> io::Result<usize> {
todo!(
"Dir::send_to_unix_datagram_addr({:?}, {:?}, {})",
self.std_file,
buf,
path.as_ref().display()
)
}
/// Creates a new `Dir` instance that shares the same underlying file
/// handle as the existing `Dir` instance.
#[inline]
pub fn try_clone(&self) -> io::Result<Self> {
let dir = self.std_file.try_clone()?;
Ok(Self::from_std_file(dir))
}
/// Returns `true` if the path points at an existing entity.
///
/// This corresponds to [`std::path::Path::exists`], but only
/// accesses paths relative to `self`.
#[inline]
pub fn exists<P: AsRef<Path>>(&self, path: P) -> bool {
self.metadata(path).is_ok()
}
/// Returns `true` if the path points at an existing entity.
///
/// This corresponds to [`std::fs::try_exists`], but only
/// accesses paths relative to `self`.
///
/// # API correspondence with `std`
///
/// This API is not yet stable in `std`, but is likely to be. For more
/// information, see the [tracker issue](https://github.com/rust-lang/rust/issues/83186).
#[inline]
pub fn try_exists<P: AsRef<Path>>(&self, path: P) -> io::Result<bool> {
match self.metadata(path) {
Ok(_) => Ok(true),
Err(error) if error.kind() == io::ErrorKind::NotFound => Ok(false),
Err(error) => Err(error),
}
}
/// Returns `true` if the path exists on disk and is pointing at a regular
/// file.
///
/// This corresponds to [`std::path::Path::is_file`], but only
/// accesses paths relative to `self`.
#[inline]
pub fn is_file<P: AsRef<Path>>(&self, path: P) -> bool {
self.metadata(path).map(|m| m.is_file()).unwrap_or(false)
}
/// Checks if `path` is a directory.
///
/// This is similar to [`std::path::Path::is_dir`] in that it checks if
/// `path` relative to `Dir` is a directory. This function will
/// traverse symbolic links to query information about the destination
/// file. In case of broken symbolic links, this will return `false`.
#[inline]
pub fn is_dir<P: AsRef<Path>>(&self, path: P) -> bool {
self.metadata(path).map(|m| m.is_dir()).unwrap_or(false)
}
/// Constructs a new instance of `Self` by opening the given path as a
/// directory using the host process' ambient authority.
///
/// # Ambient Authority
///
/// This function is not sandboxed and may access any path that the host
/// process has access to.
#[inline]
pub fn open_ambient_dir<P: AsRef<Path>>(
path: P,
ambient_authority: AmbientAuthority,
) -> io::Result<Self> {
let dir = open_ambient_dir(path.as_ref(), ambient_authority)?;
Ok(Self::from_std_file(dir))
}
/// Constructs a new instance of `Self` by opening the parent directory
/// (aka "..") of `self`, using the host process' ambient authority.
///
/// # Ambient Authority
///
/// This function accesses a directory outside of the `self` subtree.
#[inline]
pub fn open_parent_dir(&self, ambient_authority: AmbientAuthority) -> io::Result<Self> {
let dir = open_parent_dir(&self.std_file, ambient_authority)?;
Ok(Self::from_std_file(dir))
}
/// Recursively create a directory and all of its parent components if they
/// are missing, using the host process' ambient authority.
///
/// # Ambient Authority
///
/// This function is not sandboxed and may access any path that the host
/// process has access to.
#[inline]
pub fn create_ambient_dir_all<P: AsRef<Path>>(
path: P,
ambient_authority: AmbientAuthority,
) -> io::Result<()> {
let _ = ambient_authority;
fs::create_dir_all(path)
}
/// Construct a new instance of `Self` from existing directory file
/// descriptor.
///
/// This can be useful when interacting with other libraries and or C/C++
/// code which has invoked `openat(..., O_DIRECTORY)` external to this
/// crate.
pub fn reopen_dir<Filelike: AsFilelike>(dir: &Filelike) -> io::Result<Self> {
cap_primitives::fs::open_dir(
&dir.as_filelike_view::<std::fs::File>(),
std::path::Component::CurDir.as_ref(),
)
.map(Self::from_std_file)
}
}
// Safety: `FilelikeViewType` is implemented for `std::fs::File`.
unsafe impl io_lifetimes::views::FilelikeViewType for Dir {}
#[cfg(not(windows))]
impl FromRawFd for Dir {
#[inline]
unsafe fn from_raw_fd(fd: RawFd) -> Self {
Self::from_std_file(fs::File::from_raw_fd(fd))
}
}
#[cfg(not(windows))]
impl From<OwnedFd> for Dir {
#[inline]
fn from(fd: OwnedFd) -> Self {
Self::from_std_file(fs::File::from(fd))
}
sourcepub fn into_std_file(self) -> File
pub fn into_std_file(self) -> File
Consumes self
and returns a std::fs::File
.
sourcepub fn open<P: AsRef<Path>>(&self, path: P) -> Result<File>
pub fn open<P: AsRef<Path>>(&self, path: P) -> Result<File>
Attempts to open a file in read-only mode.
This corresponds to std::fs::File::open
, but only accesses paths
relative to self
.
Examples found in repository?
More examples
277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302
pub fn read<P: AsRef<Path>>(&self, path: P) -> io::Result<Vec<u8>> {
let mut file = self.open(path)?;
let mut bytes = Vec::with_capacity(initial_buffer_size(&file));
file.read_to_end(&mut bytes)?;
Ok(bytes)
}
/// Reads a symbolic link, returning the file that the link points to.
///
/// This corresponds to [`std::fs::read_link`], but only accesses paths
/// relative to `self`.
#[inline]
pub fn read_link<P: AsRef<Path>>(&self, path: P) -> io::Result<PathBuf> {
read_link(&self.std_file, path.as_ref())
}
/// Read the entire contents of a file into a string.
///
/// This corresponds to [`std::fs::read_to_string`], but only accesses
/// paths relative to `self`.
#[inline]
pub fn read_to_string<P: AsRef<Path>>(&self, path: P) -> io::Result<String> {
let mut s = String::new();
self.open(path)?.read_to_string(&mut s)?;
Ok(s)
}
sourcepub fn open_with<P: AsRef<Path>>(
&self,
path: P,
options: &OpenOptions
) -> Result<File>
pub fn open_with<P: AsRef<Path>>(
&self,
path: P,
options: &OpenOptions
) -> Result<File>
Opens a file at path
with the options specified by options
.
This corresponds to std::fs::OpenOptions::open
.
Instead of being a method on OpenOptions
, this is a method on Dir
,
and it only accesses paths relative to self
.
Examples found in repository?
75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190
pub fn open<P: AsRef<Path>>(&self, path: P) -> io::Result<File> {
self.open_with(path, OpenOptions::new().read(true))
}
/// Opens a file at `path` with the options specified by `options`.
///
/// This corresponds to [`std::fs::OpenOptions::open`].
///
/// Instead of being a method on `OpenOptions`, this is a method on `Dir`,
/// and it only accesses paths relative to `self`.
#[inline]
pub fn open_with<P: AsRef<Path>>(&self, path: P, options: &OpenOptions) -> io::Result<File> {
self._open_with(path.as_ref(), options)
}
#[cfg(not(target_os = "wasi"))]
#[inline]
fn _open_with(&self, path: &Path, options: &OpenOptions) -> io::Result<File> {
let dir = open(&self.std_file, path, options)?;
Ok(File::from_std(dir))
}
#[cfg(target_os = "wasi")]
#[inline]
fn _open_with(&self, path: &Path, options: &OpenOptions) -> io::Result<File> {
let dir = options.open_at(&self.std_file, path)?;
Ok(File::from_std(dir))
}
/// Attempts to open a directory.
#[inline]
pub fn open_dir<P: AsRef<Path>>(&self, path: P) -> io::Result<Self> {
let dir = open_dir(&self.std_file, path.as_ref())?;
Ok(Self::from_std_file(dir))
}
/// Creates a new, empty directory at the provided path.
///
/// This corresponds to [`std::fs::create_dir`], but only accesses paths
/// relative to `self`.
#[inline]
pub fn create_dir<P: AsRef<Path>>(&self, path: P) -> io::Result<()> {
self._create_dir_one(path.as_ref(), &DirOptions::new())
}
/// Recursively create a directory and all of its parent components if they
/// are missing.
///
/// This corresponds to [`std::fs::create_dir_all`], but only accesses
/// paths relative to `self`.
#[inline]
pub fn create_dir_all<P: AsRef<Path>>(&self, path: P) -> io::Result<()> {
self._create_dir_all(path.as_ref(), &DirOptions::new())
}
/// Creates the specified directory with the options configured in this
/// builder.
///
/// This corresponds to [`std::fs::DirBuilder::create`].
#[cfg(not(target_os = "wasi"))]
#[inline]
pub fn create_dir_with<P: AsRef<Path>>(
&self,
path: P,
dir_builder: &DirBuilder,
) -> io::Result<()> {
let options = dir_builder.options();
if dir_builder.is_recursive() {
self._create_dir_all(path.as_ref(), options)
} else {
self._create_dir_one(path.as_ref(), options)
}
}
fn _create_dir_one(&self, path: &Path, dir_options: &DirOptions) -> io::Result<()> {
create_dir(&self.std_file, path, dir_options)
}
fn _create_dir_all(&self, path: &Path, dir_options: &DirOptions) -> io::Result<()> {
if path == Path::new("") {
return Ok(());
}
match self._create_dir_one(path, dir_options) {
Ok(()) => return Ok(()),
Err(ref e) if e.kind() == io::ErrorKind::NotFound => {}
Err(_) if self.is_dir(path) => return Ok(()),
Err(e) => return Err(e),
}
match path.parent() {
Some(p) => self._create_dir_all(p, dir_options)?,
None => {
return Err(io::Error::new(
io::ErrorKind::Other,
"failed to create whole tree",
))
}
}
match self._create_dir_one(path, dir_options) {
Ok(()) => Ok(()),
Err(_) if self.is_dir(path) => Ok(()),
Err(e) => Err(e),
}
}
/// Opens a file in write-only mode.
///
/// This corresponds to [`std::fs::File::create`], but only accesses paths
/// relative to `self`.
#[inline]
pub fn create<P: AsRef<Path>>(&self, path: P) -> io::Result<File> {
self.open_with(
path,
OpenOptions::new().write(true).create(true).truncate(true),
)
}
More examples
sourcepub fn create_dir<P: AsRef<Path>>(&self, path: P) -> Result<()>
pub fn create_dir<P: AsRef<Path>>(&self, path: P) -> Result<()>
Creates a new, empty directory at the provided path.
This corresponds to std::fs::create_dir
, but only accesses paths
relative to self
.
sourcepub fn create_dir_all<P: AsRef<Path>>(&self, path: P) -> Result<()>
pub fn create_dir_all<P: AsRef<Path>>(&self, path: P) -> Result<()>
Recursively create a directory and all of its parent components if they are missing.
This corresponds to std::fs::create_dir_all
, but only accesses
paths relative to self
.
sourcepub fn create_dir_with<P: AsRef<Path>>(
&self,
path: P,
dir_builder: &DirBuilder
) -> Result<()>
Available on non-WASI only.
pub fn create_dir_with<P: AsRef<Path>>(
&self,
path: P,
dir_builder: &DirBuilder
) -> Result<()>
Creates the specified directory with the options configured in this builder.
This corresponds to std::fs::DirBuilder::create
.
sourcepub fn create<P: AsRef<Path>>(&self, path: P) -> Result<File>
pub fn create<P: AsRef<Path>>(&self, path: P) -> Result<File>
Opens a file in write-only mode.
This corresponds to std::fs::File::create
, but only accesses paths
relative to self
.
Examples found in repository?
More examples
sourcepub fn canonicalize<P: AsRef<Path>>(&self, path: P) -> Result<PathBuf>
pub fn canonicalize<P: AsRef<Path>>(&self, path: P) -> Result<PathBuf>
Returns the canonical form of a path with all intermediate components normalized and symbolic links resolved.
This corresponds to std::fs::canonicalize
, but instead of returning
an absolute path, returns a path relative to the directory
represented by self
.
sourcepub fn copy<P: AsRef<Path>, Q: AsRef<Path>>(
&self,
from: P,
to_dir: &Self,
to: Q
) -> Result<u64>
pub fn copy<P: AsRef<Path>, Q: AsRef<Path>>(
&self,
from: P,
to_dir: &Self,
to: Q
) -> Result<u64>
Copies the contents of one file to another. This function will also copy the permission bits of the original file to the destination file.
This corresponds to std::fs::copy
, but only accesses paths
relative to self
.
sourcepub fn hard_link<P: AsRef<Path>, Q: AsRef<Path>>(
&self,
src: P,
dst_dir: &Self,
dst: Q
) -> Result<()>
pub fn hard_link<P: AsRef<Path>, Q: AsRef<Path>>(
&self,
src: P,
dst_dir: &Self,
dst: Q
) -> Result<()>
Creates a new hard link on a filesystem.
This corresponds to std::fs::hard_link
, but only accesses paths
relative to self
.
sourcepub fn metadata<P: AsRef<Path>>(&self, path: P) -> Result<Metadata>
pub fn metadata<P: AsRef<Path>>(&self, path: P) -> Result<Metadata>
Given a path, query the file system to get information about a file, directory, etc.
This corresponds to std::fs::metadata
, but only accesses paths
relative to self
.
Examples found in repository?
586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627
pub fn exists<P: AsRef<Path>>(&self, path: P) -> bool {
self.metadata(path).is_ok()
}
/// Returns `true` if the path points at an existing entity.
///
/// This corresponds to [`std::fs::try_exists`], but only
/// accesses paths relative to `self`.
///
/// # API correspondence with `std`
///
/// This API is not yet stable in `std`, but is likely to be. For more
/// information, see the [tracker issue](https://github.com/rust-lang/rust/issues/83186).
#[inline]
pub fn try_exists<P: AsRef<Path>>(&self, path: P) -> io::Result<bool> {
match self.metadata(path) {
Ok(_) => Ok(true),
Err(error) if error.kind() == io::ErrorKind::NotFound => Ok(false),
Err(error) => Err(error),
}
}
/// Returns `true` if the path exists on disk and is pointing at a regular
/// file.
///
/// This corresponds to [`std::path::Path::is_file`], but only
/// accesses paths relative to `self`.
#[inline]
pub fn is_file<P: AsRef<Path>>(&self, path: P) -> bool {
self.metadata(path).map(|m| m.is_file()).unwrap_or(false)
}
/// Checks if `path` is a directory.
///
/// This is similar to [`std::path::Path::is_dir`] in that it checks if
/// `path` relative to `Dir` is a directory. This function will
/// traverse symbolic links to query information about the destination
/// file. In case of broken symbolic links, this will return `false`.
#[inline]
pub fn is_dir<P: AsRef<Path>>(&self, path: P) -> bool {
self.metadata(path).map(|m| m.is_dir()).unwrap_or(false)
}
More examples
sourcepub fn dir_metadata(&self) -> Result<Metadata>
pub fn dir_metadata(&self) -> Result<Metadata>
Queries metadata about the underlying directory.
This is similar to std::fs::File::metadata
, but for Dir
rather
than for File
.
sourcepub fn read_dir<P: AsRef<Path>>(&self, path: P) -> Result<ReadDir>
pub fn read_dir<P: AsRef<Path>>(&self, path: P) -> Result<ReadDir>
Returns an iterator over the entries within a directory.
This corresponds to std::fs::read_dir
, but only accesses paths
relative to self
.
sourcepub fn read<P: AsRef<Path>>(&self, path: P) -> Result<Vec<u8>>
pub fn read<P: AsRef<Path>>(&self, path: P) -> Result<Vec<u8>>
Read the entire contents of a file into a bytes vector.
This corresponds to std::fs::read
, but only accesses paths
relative to self
.
sourcepub fn read_link<P: AsRef<Path>>(&self, path: P) -> Result<PathBuf>
pub fn read_link<P: AsRef<Path>>(&self, path: P) -> Result<PathBuf>
Reads a symbolic link, returning the file that the link points to.
This corresponds to std::fs::read_link
, but only accesses paths
relative to self
.
sourcepub fn read_to_string<P: AsRef<Path>>(&self, path: P) -> Result<String>
pub fn read_to_string<P: AsRef<Path>>(&self, path: P) -> Result<String>
Read the entire contents of a file into a string.
This corresponds to std::fs::read_to_string
, but only accesses
paths relative to self
.
sourcepub fn remove_dir<P: AsRef<Path>>(&self, path: P) -> Result<()>
pub fn remove_dir<P: AsRef<Path>>(&self, path: P) -> Result<()>
Removes an empty directory.
This corresponds to std::fs::remove_dir
, but only accesses paths
relative to self
.
sourcepub fn remove_dir_all<P: AsRef<Path>>(&self, path: P) -> Result<()>
pub fn remove_dir_all<P: AsRef<Path>>(&self, path: P) -> Result<()>
Removes a directory at this path, after removing all its contents. Use carefully!
This corresponds to std::fs::remove_dir_all
, but only accesses
paths relative to self
.
sourcepub fn remove_open_dir(self) -> Result<()>
pub fn remove_open_dir(self) -> Result<()>
Remove the directory referenced by self
and consume self
.
Even though this implementation works in terms of handles as much as possible, removal is not guaranteed to be atomic with respect to a concurrent rename of the directory.
sourcepub fn remove_open_dir_all(self) -> Result<()>
pub fn remove_open_dir_all(self) -> Result<()>
Removes the directory referenced by self
, after removing all its
contents, and consume self
. Use carefully!
Even though this implementation works in terms of handles as much as possible, removal is not guaranteed to be atomic with respect to a concurrent rename of the directory.
sourcepub fn remove_file<P: AsRef<Path>>(&self, path: P) -> Result<()>
pub fn remove_file<P: AsRef<Path>>(&self, path: P) -> Result<()>
Removes a file from a filesystem.
This corresponds to std::fs::remove_file
, but only accesses paths
relative to self
.
sourcepub fn rename<P: AsRef<Path>, Q: AsRef<Path>>(
&self,
from: P,
to_dir: &Self,
to: Q
) -> Result<()>
pub fn rename<P: AsRef<Path>, Q: AsRef<Path>>(
&self,
from: P,
to_dir: &Self,
to: Q
) -> Result<()>
Rename a file or directory to a new name, replacing the original file if to already exists.
This corresponds to std::fs::rename
, but only accesses paths
relative to self
.
sourcepub fn set_permissions<P: AsRef<Path>>(
&self,
path: P,
perm: Permissions
) -> Result<()>
Available on non-WASI only.
pub fn set_permissions<P: AsRef<Path>>(
&self,
path: P,
perm: Permissions
) -> Result<()>
Changes the permissions found on a file or a directory.
This corresponds to std::fs::set_permissions
, but only accesses
paths relative to self
. Also, on some platforms, this function
may fail if the file or directory cannot be opened for reading or
writing first.
sourcepub fn symlink_metadata<P: AsRef<Path>>(&self, path: P) -> Result<Metadata>
pub fn symlink_metadata<P: AsRef<Path>>(&self, path: P) -> Result<Metadata>
Query the metadata about a file without following symlinks.
This corresponds to std::fs::symlink_metadata
, but only accesses
paths relative to self
.
sourcepub fn write<P: AsRef<Path>, C: AsRef<[u8]>>(
&self,
path: P,
contents: C
) -> Result<()>
pub fn write<P: AsRef<Path>, C: AsRef<[u8]>>(
&self,
path: P,
contents: C
) -> Result<()>
Write a slice as the entire contents of a file.
This corresponds to std::fs::write
, but only accesses paths
relative to self
.
sourcepub fn symlink<P: AsRef<Path>, Q: AsRef<Path>>(
&self,
original: P,
link: Q
) -> Result<()>
Available on non-Windows only.
pub fn symlink<P: AsRef<Path>, Q: AsRef<Path>>(
&self,
original: P,
link: Q
) -> Result<()>
Creates a new symbolic link on a filesystem.
The original
argument provides the target of the symlink. The link
argument provides the name of the created symlink.
Despite the argument ordering, original
is not resolved relative to
self
here. link
is resolved relative to self
, and original
is
not resolved within this function.
The link
path is resolved when the symlink is dereferenced, relative
to the directory that contains it.
This corresponds to std::os::unix::fs::symlink
, but only accesses
paths relative to self
.
sourcepub fn bind_unix_listener<P: AsRef<Path>>(&self, path: P) -> Result<UnixListener>
Available on Unix only.
pub fn bind_unix_listener<P: AsRef<Path>>(&self, path: P) -> Result<UnixListener>
Creates a new UnixListener
bound to the specified socket.
This corresponds to std::os::unix::net::UnixListener::bind
, but
only accesses paths relative to self
.
XXX: This function is not yet implemented.
sourcepub fn connect_unix_stream<P: AsRef<Path>>(&self, path: P) -> Result<UnixStream>
Available on Unix only.
pub fn connect_unix_stream<P: AsRef<Path>>(&self, path: P) -> Result<UnixStream>
Connects to the socket named by path.
This corresponds to std::os::unix::net::UnixStream::connect
, but
only accesses paths relative to self
.
XXX: This function is not yet implemented.
sourcepub fn bind_unix_datagram<P: AsRef<Path>>(&self, path: P) -> Result<UnixDatagram>
Available on Unix only.
pub fn bind_unix_datagram<P: AsRef<Path>>(&self, path: P) -> Result<UnixDatagram>
Creates a Unix datagram socket bound to the given path.
This corresponds to std::os::unix::net::UnixDatagram::bind
, but
only accesses paths relative to self
.
XXX: This function is not yet implemented.
sourcepub fn connect_unix_datagram<P: AsRef<Path>>(
&self,
_unix_datagram: &UnixDatagram,
path: P
) -> Result<()>
Available on Unix only.
pub fn connect_unix_datagram<P: AsRef<Path>>(
&self,
_unix_datagram: &UnixDatagram,
path: P
) -> Result<()>
Connects the socket to the specified address.
This corresponds to std::os::unix::net::UnixDatagram::connect
, but
only accesses paths relative to self
.
XXX: This function is not yet implemented.
sourcepub fn send_to_unix_datagram_addr<P: AsRef<Path>>(
&self,
_unix_datagram: &UnixDatagram,
buf: &[u8],
path: P
) -> Result<usize>
Available on Unix only.
pub fn send_to_unix_datagram_addr<P: AsRef<Path>>(
&self,
_unix_datagram: &UnixDatagram,
buf: &[u8],
path: P
) -> Result<usize>
Sends data on the socket to the specified address.
This corresponds to std::os::unix::net::UnixDatagram::send_to
, but
only accesses paths relative to self
.
XXX: This function is not yet implemented.
sourcepub fn try_clone(&self) -> Result<Self>
pub fn try_clone(&self) -> Result<Self>
Creates a new Dir
instance that shares the same underlying file
handle as the existing Dir
instance.
sourcepub fn exists<P: AsRef<Path>>(&self, path: P) -> bool
pub fn exists<P: AsRef<Path>>(&self, path: P) -> bool
Returns true
if the path points at an existing entity.
This corresponds to std::path::Path::exists
, but only
accesses paths relative to self
.
sourcepub fn try_exists<P: AsRef<Path>>(&self, path: P) -> Result<bool>
pub fn try_exists<P: AsRef<Path>>(&self, path: P) -> Result<bool>
Returns true
if the path points at an existing entity.
This corresponds to std::fs::try_exists
, but only
accesses paths relative to self
.
API correspondence with std
This API is not yet stable in std
, but is likely to be. For more
information, see the tracker issue.
sourcepub fn is_file<P: AsRef<Path>>(&self, path: P) -> bool
pub fn is_file<P: AsRef<Path>>(&self, path: P) -> bool
Returns true
if the path exists on disk and is pointing at a regular
file.
This corresponds to std::path::Path::is_file
, but only
accesses paths relative to self
.
sourcepub fn is_dir<P: AsRef<Path>>(&self, path: P) -> bool
pub fn is_dir<P: AsRef<Path>>(&self, path: P) -> bool
Checks if path
is a directory.
This is similar to std::path::Path::is_dir
in that it checks if
path
relative to Dir
is a directory. This function will
traverse symbolic links to query information about the destination
file. In case of broken symbolic links, this will return false
.
Examples found in repository?
More examples
153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178
fn _create_dir_all(&self, path: &Path, dir_options: &DirOptions) -> io::Result<()> {
if path == Path::new("") {
return Ok(());
}
match self._create_dir_one(path, dir_options) {
Ok(()) => return Ok(()),
Err(ref e) if e.kind() == io::ErrorKind::NotFound => {}
Err(_) if self.is_dir(path) => return Ok(()),
Err(e) => return Err(e),
}
match path.parent() {
Some(p) => self._create_dir_all(p, dir_options)?,
None => {
return Err(io::Error::new(
io::ErrorKind::Other,
"failed to create whole tree",
))
}
}
match self._create_dir_one(path, dir_options) {
Ok(()) => Ok(()),
Err(_) if self.is_dir(path) => Ok(()),
Err(e) => Err(e),
}
}
sourcepub fn open_ambient_dir<P: AsRef<Path>>(
path: P,
ambient_authority: AmbientAuthority
) -> Result<Self>
pub fn open_ambient_dir<P: AsRef<Path>>(
path: P,
ambient_authority: AmbientAuthority
) -> Result<Self>
Constructs a new instance of Self
by opening the given path as a
directory using the host process’ ambient authority.
Ambient Authority
This function is not sandboxed and may access any path that the host process has access to.
sourcepub fn open_parent_dir(
&self,
ambient_authority: AmbientAuthority
) -> Result<Self>
pub fn open_parent_dir(
&self,
ambient_authority: AmbientAuthority
) -> Result<Self>
Constructs a new instance of Self
by opening the parent directory
(aka “..”) of self
, using the host process’ ambient authority.
Ambient Authority
This function accesses a directory outside of the self
subtree.
sourcepub fn create_ambient_dir_all<P: AsRef<Path>>(
path: P,
ambient_authority: AmbientAuthority
) -> Result<()>
pub fn create_ambient_dir_all<P: AsRef<Path>>(
path: P,
ambient_authority: AmbientAuthority
) -> Result<()>
Recursively create a directory and all of its parent components if they are missing, using the host process’ ambient authority.
Ambient Authority
This function is not sandboxed and may access any path that the host process has access to.
sourcepub fn reopen_dir<Filelike: AsFilelike>(dir: &Filelike) -> Result<Self>
pub fn reopen_dir<Filelike: AsFilelike>(dir: &Filelike) -> Result<Self>
Construct a new instance of Self
from existing directory file
descriptor.
This can be useful when interacting with other libraries and or C/C++
code which has invoked openat(..., O_DIRECTORY)
external to this
crate.
Trait Implementations§
source§impl AsFd for Dir
Available on non-Windows only.
impl AsFd for Dir
source§fn as_fd(&self) -> BorrowedFd<'_>
fn as_fd(&self) -> BorrowedFd<'_>
source§impl FromRawFd for Dir
Available on non-Windows only.
impl FromRawFd for Dir
source§unsafe fn from_raw_fd(fd: RawFd) -> Self
unsafe fn from_raw_fd(fd: RawFd) -> Self
Self
from the given raw file
descriptor. Read moresource§impl IntoRawFd for Dir
Available on non-Windows only.
impl IntoRawFd for Dir
source§fn into_raw_fd(self) -> RawFd
fn into_raw_fd(self) -> RawFd
impl FilelikeViewType for Dir
Auto Trait Implementations§
impl RefUnwindSafe for Dir
impl Send for Dir
impl Sync for Dir
impl Unpin for Dir
impl UnwindSafe for Dir
Blanket Implementations§
source§impl<T> AsFilelike for Twhere
T: AsFd,
impl<T> AsFilelike for Twhere
T: AsFd,
source§fn as_filelike(&self) -> BorrowedFd<'_>
fn as_filelike(&self) -> BorrowedFd<'_>
source§fn as_filelike_view<Target>(&self) -> FilelikeView<'_, Target>where
Target: FilelikeViewType,
fn as_filelike_view<Target>(&self) -> FilelikeView<'_, Target>where
Target: FilelikeViewType,
&Target
. Read moresource§impl<T> AsGrip for Twhere
T: AsFd,
impl<T> AsGrip for Twhere
T: AsFd,
source§fn as_grip(&self) -> BorrowedFd<'_>
fn as_grip(&self) -> BorrowedFd<'_>
source§impl<T> AsRawFilelike for Twhere
T: AsRawFd,
impl<T> AsRawFilelike for Twhere
T: AsRawFd,
source§fn as_raw_filelike(&self) -> i32
fn as_raw_filelike(&self) -> i32
source§impl<T> AsRawGrip for Twhere
T: AsRawFd,
impl<T> AsRawGrip for Twhere
T: AsRawFd,
source§fn as_raw_grip(&self) -> i32
fn as_raw_grip(&self) -> i32
source§impl<T> AsRawSocketlike for Twhere
T: AsRawFd,
impl<T> AsRawSocketlike for Twhere
T: AsRawFd,
source§fn as_raw_socketlike(&self) -> i32
fn as_raw_socketlike(&self) -> i32
source§impl<T> AsSocketlike for Twhere
T: AsFd,
impl<T> AsSocketlike for Twhere
T: AsFd,
source§fn as_socketlike(&self) -> BorrowedFd<'_>
fn as_socketlike(&self) -> BorrowedFd<'_>
source§fn as_socketlike_view<Target>(&self) -> SocketlikeView<'_, Target>where
Target: SocketlikeViewType,
fn as_socketlike_view<Target>(&self) -> SocketlikeView<'_, Target>where
Target: SocketlikeViewType,
&Target
. Read moresource§impl<T> FromFd for Twhere
T: From<OwnedFd>,
impl<T> FromFd for Twhere
T: From<OwnedFd>,
source§impl<T> FromFilelike for Twhere
T: From<OwnedFd>,
impl<T> FromFilelike for Twhere
T: From<OwnedFd>,
source§fn from_filelike(owned: OwnedFd) -> T
fn from_filelike(owned: OwnedFd) -> T
Self
from the given filelike object. Read moresource§fn from_into_filelike<Owned>(owned: Owned) -> Twhere
Owned: IntoFilelike,
fn from_into_filelike<Owned>(owned: Owned) -> Twhere
Owned: IntoFilelike,
Self
from the given filelike object
converted from into_owned
. Read moresource§impl<T> FromRawFilelike for Twhere
T: FromRawFd,
impl<T> FromRawFilelike for Twhere
T: FromRawFd,
source§unsafe fn from_raw_filelike(raw: i32) -> T
unsafe fn from_raw_filelike(raw: i32) -> T
Self
from the raw value. Read moresource§impl<T> FromRawGrip for Twhere
T: FromRawFd,
impl<T> FromRawGrip for Twhere
T: FromRawFd,
source§unsafe fn from_raw_grip(raw_grip: i32) -> T
unsafe fn from_raw_grip(raw_grip: i32) -> T
source§impl<T> FromRawSocketlike for Twhere
T: FromRawFd,
impl<T> FromRawSocketlike for Twhere
T: FromRawFd,
source§unsafe fn from_raw_socketlike(raw: i32) -> T
unsafe fn from_raw_socketlike(raw: i32) -> T
Self
from the raw value. Read moresource§impl<T> FromSocketlike for Twhere
T: From<OwnedFd>,
impl<T> FromSocketlike for Twhere
T: From<OwnedFd>,
source§fn from_socketlike(owned: OwnedFd) -> T
fn from_socketlike(owned: OwnedFd) -> T
Self
from the given socketlike object.source§fn from_into_socketlike<Owned>(owned: Owned) -> Twhere
Owned: IntoSocketlike,
fn from_into_socketlike<Owned>(owned: Owned) -> Twhere
Owned: IntoSocketlike,
Self
from the given socketlike object
converted from into_owned
.source§impl<T> IntoFilelike for Twhere
T: Into<OwnedFd>,
impl<T> IntoFilelike for Twhere
T: Into<OwnedFd>,
source§fn into_filelike(self) -> OwnedFd
fn into_filelike(self) -> OwnedFd
source§impl<T> IntoRawFilelike for Twhere
T: IntoRawFd,
impl<T> IntoRawFilelike for Twhere
T: IntoRawFd,
source§fn into_raw_filelike(self) -> i32
fn into_raw_filelike(self) -> i32
source§impl<T> IntoRawGrip for Twhere
T: IntoRawFd,
impl<T> IntoRawGrip for Twhere
T: IntoRawFd,
source§fn into_raw_grip(self) -> i32
fn into_raw_grip(self) -> i32
self
and convert into an RawGrip
.