diff options
Diffstat (limited to '0004-readfile.2.patch')
| -rw-r--r-- | 0004-readfile.2.patch | 242 |
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) |
