aboutsummaryrefslogtreecommitdiffstats
path: root/0004-readfile.2.patch
diff options
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>2020-06-28 17:55:01 +0200
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2020-06-28 17:55:01 +0200
commit8f9782e63481c4cd643285158e560949954341e7 (patch)
tree29b210e2abe3fec9fb00ccefaaefffd4911a0183 /0004-readfile.2.patch
parent6c6a0147ce8ee79ce8176b076f7e6eb512989982 (diff)
downloadpatches-8f9782e63481c4cd643285158e560949954341e7.tar.gz
updates
Diffstat (limited to '0004-readfile.2.patch')
-rw-r--r--0004-readfile.2.patch242
1 files changed, 242 insertions, 0 deletions
diff --git a/0004-readfile.2.patch b/0004-readfile.2.patch
new file mode 100644
index 00000000000000..be3b579d0158f7
--- /dev/null
+++ b/0004-readfile.2.patch
@@ -0,0 +1,242 @@
+From 1dcacd2cfdce9695c9e66e21d6ec0292d66da400 Mon Sep 17 00:00:00 2001
+From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+Date: Fri, 12 Jun 2020 12:11:39 +0200
+Subject: [PATCH 4/4] readfile.2
+
+---
+ readfile.2 | 229 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 1 file changed, 229 insertions(+)
+ create mode 100644 readfile.2
+
+--- /dev/null
++++ b/readfile.2
+@@ -0,0 +1,229 @@
++.\" This manpage is Copyright (C) 2020 Greg Kroah-Hartman;
++.\" and Copyright (C) 2020 The Linux Foundation
++.\"
++.\" %%%LICENSE_START(VERBATIM)
++.\" Permission is granted to make and distribute verbatim copies of this
++.\" manual provided the copyright notice and this permission notice are
++.\" preserved on all copies.
++.\"
++.\" Permission is granted to copy and distribute modified versions of this
++.\" manual under the conditions for verbatim copying, provided that the
++.\" entire resulting derived work is distributed under the terms of a
++.\" permission notice identical to this one.
++.\"
++.\" Since the Linux kernel and libraries are constantly changing, this
++.\" manual page may be incorrect or out-of-date. The author(s) assume no
++.\" responsibility for errors or omissions, or for damages resulting from
++.\" the use of the information contained herein. The author(s) may not
++.\" have taken the same level of care in the production of this manual,
++.\" which is licensed free of charge, as they might when working
++.\" professionally.
++.\"
++.\" Formatted or processed versions of this manual, if unaccompanied by
++.\" the source, must acknowledge the copyright and authors of this work.
++.\" %%%LICENSE_END
++.\"
++.TH READFILE 2 2020-06-12 "Linux" "Linux Programmer's Manual"
++.SH NAME
++readfile \- read a file into a buffer
++.SH SYNOPSIS
++.nf
++.B #include <unistd.h>
++.PP
++.BI "ssize_t readfile(int " dirfd ", const char *" pathname ", void *" buf \
++", size_t " count ", int " flags );
++.fi
++.SH DESCRIPTION
++.BR readfile ()
++attempts to open the file specified by
++.IR pathname
++and to read up to
++.I count
++bytes from the file into the buffer starting at
++.IR buf .
++It is to be a shortcut of doing the sequence of
++.BR open ()
++and then
++.BR read ()
++and then
++.BR close ()
++for small files that are read frequently, such as those in
++.B procfs
++or
++.BR sysfs .
++.PP
++If the size of file is smaller than the value provided in
++.I count
++then the whole file will be copied into
++.IR buf .
++.PP
++If the file is larger than the value provided in
++.I count
++then only
++.I count
++number of bytes will be copied into
++.IR buf .
++.PP
++The argument
++.I flags
++may contain one of the following
++.IR "access modes" :
++.BR O_NOFOLLOW ", or " O_NOATIME .
++.PP
++If the pathname given in
++.I pathname
++is relative, then it is interpreted relative to the directory
++referred to by the file descriptor
++.IR dirfd .
++.PP
++If
++.I pathname
++is relative and
++.I dirfd
++is the special value
++.BR AT_FDCWD ,
++then
++.I pathname
++is interpreted relative to the current working
++directory of the calling process (like
++.BR open ()).
++.PP
++If
++.I pathname
++is absolute, then
++.I dirfd
++is ignored.
++.SH RETURN VALUE
++On success, the number of bytes read is returned.
++It is not an error if this number is smaller than the number of bytes
++requested; this can happen if the file is smaller than the number of
++bytes requested.
++.PP
++On error, \-1 is returned, and
++.I errno
++is set appropriately.
++.SH ERRORS
++.TP
++.B EAGAIN
++The file descriptor
++.I fd
++refers to a file other than a socket and has been marked nonblocking
++.RB ( O_NONBLOCK ),
++and the read would block.
++See
++.BR open (2)
++for further details on the
++.BR O_NONBLOCK
++flag.
++.TP
++.BR EAGAIN " or " EWOULDBLOCK
++.\" Actually EAGAIN on Linux
++The file descriptor
++.I fd
++refers to a socket and has been marked nonblocking
++.RB ( O_NONBLOCK ),
++and the read would block.
++POSIX.1-2001 allows either error to be returned for this case,
++and does not require these constants to have the same value,
++so a portable application should check for both possibilities.
++.TP
++.B EBADF
++.I fd
++is not a valid file descriptor or is not open for reading.
++.TP
++.B EFAULT
++.I buf
++is outside your accessible address space.
++.TP
++.B EINTR
++The call was interrupted by a signal before any data was read; see
++.BR signal (7).
++.TP
++.B EINVAL
++.I fd
++is attached to an object which is unsuitable for reading;
++or the file was opened with the
++.B O_DIRECT
++flag, and either the address specified in
++.IR buf ,
++the value specified in
++.IR count ,
++or the file offset is not suitably aligned.
++.TP
++.B EINVAL
++.I fd
++was created via a call to
++.BR timerfd_create (2)
++and the wrong size buffer was given to
++.BR read ();
++see
++.BR timerfd_create (2)
++for further information.
++.TP
++.B EIO
++I/O error.
++This will happen for example when the process is in a
++background process group, tries to read from its controlling terminal,
++and either it is ignoring or blocking
++.B SIGTTIN
++or its process group
++is orphaned.
++It may also occur when there is a low-level I/O error
++while reading from a disk or tape.
++A further possible cause of
++.B EIO
++on networked filesystems is when an advisory lock had been taken
++out on the file descriptor and this lock has been lost.
++See the
++.I "Lost locks"
++section of
++.BR fcntl (2)
++for further details.
++.TP
++.B EISDIR
++.I fd
++refers to a directory.
++.PP
++Other errors may occur, depending on the object connected to
++.IR fd .
++.SH CONFORMING TO
++SVr4, 4.3BSD, POSIX.1-2001.
++.SH NOTES
++The types
++.I size_t
++and
++.I ssize_t
++are, respectively,
++unsigned and signed integer data types specified by POSIX.1.
++.PP
++On Linux,
++.BR read ()
++(and similar system calls) will transfer at most
++0x7ffff000 (2,147,479,552) bytes,
++returning the number of bytes actually transferred.
++.\" commit e28cc71572da38a5a12c1cfe4d7032017adccf69
++(This is true on both 32-bit and 64-bit systems.)
++.PP
++On NFS filesystems, reading small amounts of data will update the
++timestamp only the first time, subsequent calls may not do so.
++This is caused
++by client side attribute caching, because most if not all NFS clients
++leave
++.I st_atime
++(last file access time)
++updates to the server, and client side reads satisfied from the
++client's cache will not cause
++.I st_atime
++updates on the server as there are no
++server-side reads.
++UNIX semantics can be obtained by disabling client-side attribute caching,
++but in most situations this will substantially
++increase server load and decrease performance.
++.SH BUGS
++None yet!
++.SH SEE ALSO
++.BR close (2),
++.BR open (2),
++.BR openat (2),
++.BR read (2),
++.BR fread (3)