]> git.proxmox.com Git - rustc.git/blame - vendor/rustix-0.37.6/src/io/read_write.rs
New upstream version 1.74.1+dfsg1
[rustc.git] / vendor / rustix-0.37.6 / src / io / read_write.rs
CommitLineData
fe692bf9
FG
1//! `read` and `write`, optionally positioned, optionally vectored
2
3use crate::{backend, io};
4use backend::fd::AsFd;
5
6// Declare `IoSlice` and `IoSliceMut`.
7#[cfg(not(windows))]
8#[cfg(not(feature = "std"))]
9pub use backend::io::io_slice::{IoSlice, IoSliceMut};
10#[cfg(not(windows))]
11#[cfg(feature = "std")]
12pub use std::io::{IoSlice, IoSliceMut};
13
781aab86 14#[cfg(any(target_os = "android", target_os = "linux"))]
fe692bf9
FG
15pub use backend::io::types::ReadWriteFlags;
16
17/// `read(fd, buf)`—Reads from a stream.
18///
19/// # References
20/// - [POSIX]
21/// - [Linux]
22/// - [Apple]
fe692bf9
FG
23///
24/// [POSIX]: https://pubs.opengroup.org/onlinepubs/9699919799/functions/read.html
25/// [Linux]: https://man7.org/linux/man-pages/man2/read.2.html
26/// [Apple]: https://developer.apple.com/library/archive/documentation/System/Conceptual/ManPages_iPhoneOS/man2/read.2.html
fe692bf9
FG
27#[inline]
28pub fn read<Fd: AsFd>(fd: Fd, buf: &mut [u8]) -> io::Result<usize> {
29 backend::io::syscalls::read(fd.as_fd(), buf)
30}
31
32/// `write(fd, buf)`—Writes to a stream.
33///
34/// # References
35/// - [POSIX]
36/// - [Linux]
37/// - [Apple]
fe692bf9
FG
38///
39/// [POSIX]: https://pubs.opengroup.org/onlinepubs/9699919799/functions/write.html
40/// [Linux]: https://man7.org/linux/man-pages/man2/write.2.html
41/// [Apple]: https://developer.apple.com/library/archive/documentation/System/Conceptual/ManPages_iPhoneOS/man2/write.2.html
fe692bf9
FG
42#[inline]
43pub fn write<Fd: AsFd>(fd: Fd, buf: &[u8]) -> io::Result<usize> {
44 backend::io::syscalls::write(fd.as_fd(), buf)
45}
46
47/// `pread(fd, buf, offset)`—Reads from a file at a given position.
48///
49/// # References
50/// - [POSIX]
51/// - [Linux]
52/// - [Apple]
fe692bf9
FG
53///
54/// [POSIX]: https://pubs.opengroup.org/onlinepubs/9699919799/functions/pread.html
55/// [Linux]: https://man7.org/linux/man-pages/man2/pread.2.html
56/// [Apple]: https://developer.apple.com/library/archive/documentation/System/Conceptual/ManPages_iPhoneOS/man2/pread.2.html
fe692bf9
FG
57#[inline]
58pub fn pread<Fd: AsFd>(fd: Fd, buf: &mut [u8], offset: u64) -> io::Result<usize> {
59 backend::io::syscalls::pread(fd.as_fd(), buf, offset)
60}
61
62/// `pwrite(fd, bufs)`—Writes to a file at a given position.
63///
64/// Contrary to POSIX, on many popular platforms including Linux and FreeBSD,
65/// if the file is opened in append mode, this ignores the offset appends the
66/// data to the end of the file.
67///
68/// # References
69/// - [POSIX]
70/// - [Linux]
71/// - [Apple]
fe692bf9
FG
72///
73/// [POSIX]: https://pubs.opengroup.org/onlinepubs/9699919799/functions/pwrite.html
74/// [Linux]: https://man7.org/linux/man-pages/man2/pwrite.2.html
75/// [Apple]: https://developer.apple.com/library/archive/documentation/System/Conceptual/ManPages_iPhoneOS/man2/pwrite.2.html
fe692bf9
FG
76#[inline]
77pub fn pwrite<Fd: AsFd>(fd: Fd, buf: &[u8], offset: u64) -> io::Result<usize> {
78 backend::io::syscalls::pwrite(fd.as_fd(), buf, offset)
79}
80
81/// `readv(fd, bufs)`—Reads from a stream into multiple buffers.
82///
83/// # References
84/// - [POSIX]
85/// - [Linux]
86/// - [Apple]
fe692bf9
FG
87///
88/// [POSIX]: https://pubs.opengroup.org/onlinepubs/9699919799/functions/readv.html
89/// [Linux]: https://man7.org/linux/man-pages/man2/readv.2.html
90/// [Apple]: https://developer.apple.com/library/archive/documentation/System/Conceptual/ManPages_iPhoneOS/man2/readv.2.html
fe692bf9
FG
91#[inline]
92pub fn readv<Fd: AsFd>(fd: Fd, bufs: &mut [IoSliceMut<'_>]) -> io::Result<usize> {
93 backend::io::syscalls::readv(fd.as_fd(), bufs)
94}
95
96/// `writev(fd, bufs)`—Writes to a stream from multiple buffers.
97///
98/// # References
99/// - [POSIX]
100/// - [Linux]
101/// - [Apple]
fe692bf9
FG
102///
103/// [POSIX]: https://pubs.opengroup.org/onlinepubs/9699919799/functions/writev.html
104/// [Linux]: https://man7.org/linux/man-pages/man2/writev.2.html
105/// [Apple]: https://developer.apple.com/library/archive/documentation/System/Conceptual/ManPages_iPhoneOS/man2/writev.2.html
fe692bf9
FG
106#[inline]
107pub fn writev<Fd: AsFd>(fd: Fd, bufs: &[IoSlice<'_>]) -> io::Result<usize> {
108 backend::io::syscalls::writev(fd.as_fd(), bufs)
109}
110
111/// `preadv(fd, bufs, offset)`—Reads from a file at a given position into
112/// multiple buffers.
113///
114/// # References
115/// - [Linux]
fe692bf9
FG
116///
117/// [Linux]: https://man7.org/linux/man-pages/man2/preadv.2.html
fe692bf9
FG
118#[cfg(not(any(target_os = "haiku", target_os = "redox", target_os = "solaris")))]
119#[inline]
120pub fn preadv<Fd: AsFd>(fd: Fd, bufs: &mut [IoSliceMut<'_>], offset: u64) -> io::Result<usize> {
121 backend::io::syscalls::preadv(fd.as_fd(), bufs, offset)
122}
123
124/// `pwritev(fd, bufs, offset)`—Writes to a file at a given position from
125/// multiple buffers.
126///
127/// Contrary to POSIX, on many popular platforms including Linux and FreeBSD,
128/// if the file is opened in append mode, this ignores the offset appends the
129/// data to the end of the file.
130///
131/// # References
132/// - [Linux]
fe692bf9
FG
133///
134/// [Linux]: https://man7.org/linux/man-pages/man2/pwritev.2.html
fe692bf9
FG
135#[cfg(not(any(target_os = "haiku", target_os = "redox", target_os = "solaris")))]
136#[inline]
137pub fn pwritev<Fd: AsFd>(fd: Fd, bufs: &[IoSlice<'_>], offset: u64) -> io::Result<usize> {
138 backend::io::syscalls::pwritev(fd.as_fd(), bufs, offset)
139}
140
141/// `preadv2(fd, bufs, offset, flags)`—Reads data, with several options.
142///
143/// An `offset` of `u64::MAX` means to use and update the current file offset.
144///
145/// # References
146/// - [Linux]
147///
148/// [Linux]: https://man7.org/linux/man-pages/man2/preadv2.2.html
781aab86 149#[cfg(any(target_os = "android", target_os = "linux"))]
fe692bf9
FG
150#[inline]
151pub fn preadv2<Fd: AsFd>(
152 fd: Fd,
153 bufs: &mut [IoSliceMut<'_>],
154 offset: u64,
155 flags: ReadWriteFlags,
156) -> io::Result<usize> {
157 backend::io::syscalls::preadv2(fd.as_fd(), bufs, offset, flags)
158}
159
160/// `pwritev2(fd, bufs, offset, flags)`—Writes data, with several options.
161///
162/// An `offset` of `u64::MAX` means to use and update the current file offset.
163///
164/// # References
165/// - [Linux]
166///
167/// [Linux]: https://man7.org/linux/man-pages/man2/pwritev2.2.html
781aab86 168#[cfg(any(target_os = "android", target_os = "linux"))]
fe692bf9
FG
169#[inline]
170pub fn pwritev2<Fd: AsFd>(
171 fd: Fd,
172 bufs: &[IoSlice<'_>],
173 offset: u64,
174 flags: ReadWriteFlags,
175) -> io::Result<usize> {
176 backend::io::syscalls::pwritev2(fd.as_fd(), bufs, offset, flags)
177}