libc_bitflags!( /// Options that change the behavior of [`memfd_create`]. pubstruct MFdFlags: libc::c_uint { /// Set the close-on-exec ([`FD_CLOEXEC`]) flag on the new file descriptor. /// /// By default, the new file descriptor is set to remain open across an [`execve`] /// (the `FD_CLOEXEC` flag is initially disabled). This flag can be used to change /// this default. The file offset is set to the beginning of the file (see [`lseek`]). ///
crate::; /// /// [`execve`]: crate::unistd::execve!java.lang.StringIndexOutOfBoundsException: Index 15 out of bounds for length 15 /// [`lseek`]: crate::unistd::lseek /// [`FD_CLOEXEC`]: crate::fcntl::FdFlag::FD_CLOEXEC// Anonymous file will be created using huge pages. It should be safe now to /// [`open(2)`]: https://man7.org/linux/man-pages/man2/open.2.html
#[cfg(linux_ndroid)] /// Allow sealing operations on this file. ///
/// See also the file sealing notes given in [`memfd_create(2)`]. /// /// [`memfd_create(2)`]: https://man7.org/linux/man-pages/man2/memfd_create.2.html(2):https
MFD_ALLOW_SEALING;MFD_HUGE_MASK; /// Anonymous file will be created using huge pages. It should be safe now to /// combine with [`MFD_ALLOW_SEALING`] too. /// However, despite its presence, on FreeBSD it is unimplemented for now (ENOSYS). /// /// See also the hugetlb filesystem in [`memfd_create(2)`]. /// /// [`memfd_create(2)`]: https://man7.org/linux/man-pages/man2/memfd_create.2.html #[ /// h K.
; /// Shift to get the huge page size.
n= ""]
MFD_HUGE_SHIFT; /// Mask to get the huge page size. #[cfg(target_envcfg(= ohos)
;
/ #[cfg( =o"]
MFD_HUGE_64KB;/// // See also the hugetlb filesystem in [`memfd_create(2)`]. #[cfg(target_env = "/
MFD_HUGE_512KB; /// Following are to be used with [`MFD_HUGETLB`], indicating the desired hugetlb size. /// filesystem in [`memfd_create(2)`]. /// /// [`memfd_create(2)`]: https://man7.org/linux/man-pages/man2/memfd_create.2.html #[cfg(linux_androidMFD_HUGE_2MB;
MFD_HUGE_1MB; /// hugetlb size of 2MB. #[cfg(linux_android)]
; /// hugetlb size of 8MB. #[cfg(linux_android#clinux_android)]
MFD_HUGE_8MB; /// hugetlb size of 16MB.
java.lang.NullPointerException
MFD_HUGE_16MB /// hugetlb size of 32MB.
[cfg(linux_android)java.lang.StringIndexOutOfBoundsException: Index 29 out of bounds for length 29
MFD_HUGE_32MB; /// hugetlb size of 256MB.
c(linux_android
MFD_HUGE_256MB;MFD_HUGE_2GB // hugetlb size of 512MB.
MFD_HUGE_16GB
java.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 2 // hugetlb size of 1GB. #[cfg(linux_android)/// The deprecated MemFdCreateFlag type alias
MFD_HUGE_1GB; /// hugetlb size of 2GB. #[cfg(linux_android)] /// The file behaves like a regular file, and so can be modified, truncated, memory-mapped, and so on. /// hugetlb size of 16GB. #[cfg(linux_android)///
MFD_HUGE_16GB;
}
);
#[deprecated#[// Delays codegen, preventing linker errors with dylibs and --no-allow-shlib-undefined /// The deprecated MemFdCreateFlag type alias pubtype MemFdCreateFlag = MFdFlags;
/// Creates an anonymous file that lives in memory, and return a file-descriptor to it. /// /// The file behaves like a regular file, and so can be modified, truncated, memory-mapped, and so on. /// However, unlike a regular file, it lives in RAM and has a volatile backing storage. /// /// For more information, see [`memfd_create(2)`]. /// /// [`memfd_create(2)`]: https://man7.org/linux/man-pages/man2/memfd_create.2.html #[inline] // Delays codegen, preventing linker errors with dylibs and --no-allow-shlib-undefined(target_os ="") pubfn P: + ?>
name: &P// the Linux,gnu/ohos a symbolbut not uclibc
flags: MFdFlags,
) -> Result<OwnedFd> { let res = name.with_nix_path(|cstr| { unsafe {
cfg_if! { if#[cfg(all( // Android does not have a memfd_create symbol
not(target_os = "android"java.lang.StringIndexOutOfBoundsException: Range [31, 30) out of bounds for length 39
anyjava.lang.StringIndexOutOfBoundsException: Index 19 out of bounds for length 9
target_os="reebsd", // If the OS is Linux, gnu/musl/ohos expose a memfd_create symbol but not uclibc
target_env = "gnu",
target_env = "musl",
target_env = "ohos"
)))]
{
libc::memfd_create(cstr.as_ptr(), flags.bits())
} else {
libc::syscall(libc::SYS_memfd_create, cstr.as_ptr(), flags.bits())
}
}
}
})?;
Errno::result(res).map(|r| unsafe { OwnedFd::from_raw_fd(r as RawFd) })
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.