mirror of https://github.com/mkerrisk/man-pages
185 lines
5.2 KiB
Groff
185 lines
5.2 KiB
Groff
.\" Copyright (c) 1990, 1991 The Regents of the University of California.
|
|
.\" and Copyright (c) 2020 Arkadiusz Drabczyk <arkadiusz@drabczyk.org>
|
|
.\" All rights reserved.
|
|
.\"
|
|
.\" This code is derived from software contributed to Berkeley by
|
|
.\" Chris Torek and the American National Standards Committee X3,
|
|
.\" on Information Processing Systems.
|
|
.\"
|
|
.\" %%%LICENSE_START(BSD_4_CLAUSE_UCB)
|
|
.\" Redistribution and use in source and binary forms, with or without
|
|
.\" modification, are permitted provided that the following conditions
|
|
.\" are met:
|
|
.\" 1. Redistributions of source code must retain the above copyright
|
|
.\" notice, this list of conditions and the following disclaimer.
|
|
.\" 2. Redistributions in binary form must reproduce the above copyright
|
|
.\" notice, this list of conditions and the following disclaimer in the
|
|
.\" documentation and/or other materials provided with the distribution.
|
|
.\" 3. All advertising materials mentioning features or use of this software
|
|
.\" must display the following acknowledgement:
|
|
.\" This product includes software developed by the University of
|
|
.\" California, Berkeley and its contributors.
|
|
.\" 4. Neither the name of the University nor the names of its contributors
|
|
.\" may be used to endorse or promote products derived from this software
|
|
.\" without specific prior written permission.
|
|
.\"
|
|
.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
|
.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
|
.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
|
.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
|
.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
|
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
|
.\" SUCH DAMAGE.
|
|
.\" %%%LICENSE_END
|
|
.\"
|
|
.\" @(#)fread.3 6.6 (Berkeley) 6/29/91
|
|
.\"
|
|
.\" Converted for Linux, Mon Nov 29 15:37:33 1993, faith@cs.unc.edu
|
|
.\" Sun Feb 19 21:26:54 1995 by faith, return values
|
|
.\" Modified Thu Apr 20 20:43:53 1995 by Jim Van Zandt <jrv@vanzandt.mv.com>
|
|
.\" Modified Fri May 17 10:21:51 1996 by Martin Schulze <joey@infodrom.north.de>
|
|
.\"
|
|
.TH FREAD 3 2021-03-22 "GNU" "Linux Programmer's Manual"
|
|
.SH NAME
|
|
fread, fwrite \- binary stream input/output
|
|
.SH SYNOPSIS
|
|
.nf
|
|
.B #include <stdio.h>
|
|
.PP
|
|
.BI "size_t fread(void *restrict " ptr ", size_t " size ", size_t " nmemb ,
|
|
.BI " FILE *restrict " stream );
|
|
.BI "size_t fwrite(const void *restrict " ptr ", size_t " size \
|
|
", size_t " nmemb ,
|
|
.BI " FILE *restrict " stream );
|
|
.fi
|
|
.SH DESCRIPTION
|
|
The function
|
|
.BR fread ()
|
|
reads
|
|
.I nmemb
|
|
items of data, each
|
|
.I size
|
|
bytes long, from the stream pointed to by
|
|
.IR stream ,
|
|
storing them at the location given by
|
|
.IR ptr .
|
|
.PP
|
|
The function
|
|
.BR fwrite ()
|
|
writes
|
|
.I nmemb
|
|
items of data, each
|
|
.I size
|
|
bytes long, to the stream pointed to by
|
|
.IR stream ,
|
|
obtaining them from the location given by
|
|
.IR ptr .
|
|
.PP
|
|
For nonlocking counterparts, see
|
|
.BR unlocked_stdio (3).
|
|
.SH RETURN VALUE
|
|
On success,
|
|
.BR fread ()
|
|
and
|
|
.BR fwrite ()
|
|
return the number of items read or written.
|
|
This number equals the number of bytes transferred only when
|
|
.I size
|
|
is 1.
|
|
If an error occurs, or the end of the file is reached,
|
|
the return value is a short item count (or zero).
|
|
.PP
|
|
The file position indicator for the stream is advanced by the number
|
|
of bytes successfully read or written.
|
|
.PP
|
|
.BR fread ()
|
|
does not distinguish between end-of-file and error, and callers must use
|
|
.BR feof (3)
|
|
and
|
|
.BR ferror (3)
|
|
to determine which occurred.
|
|
.SH ATTRIBUTES
|
|
For an explanation of the terms used in this section, see
|
|
.BR attributes (7).
|
|
.ad l
|
|
.nh
|
|
.TS
|
|
allbox;
|
|
lbx lb lb
|
|
l l l.
|
|
Interface Attribute Value
|
|
T{
|
|
.BR fread (),
|
|
.BR fwrite ()
|
|
T} Thread safety MT-Safe
|
|
.TE
|
|
.hy
|
|
.ad
|
|
.sp 1
|
|
.SH CONFORMING TO
|
|
POSIX.1-2001, POSIX.1-2008, C89.
|
|
.SH EXAMPLES
|
|
The program below demonstrates the use of
|
|
.BR fread ()
|
|
by parsing /bin/sh ELF executable in binary mode and printing its
|
|
magic and class:
|
|
.PP
|
|
.in +4n
|
|
.EX
|
|
$ \fB./a.out\fP
|
|
ELF magic: 0x7f454c46
|
|
Class: 0x02
|
|
.EE
|
|
.in
|
|
.SS Program source
|
|
\&
|
|
.EX
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
|
|
#define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]))
|
|
|
|
int
|
|
main(void)
|
|
{
|
|
FILE *fp = fopen("/bin/sh", "rb");
|
|
if (!fp) {
|
|
perror("fopen");
|
|
return EXIT_FAILURE;
|
|
}
|
|
|
|
unsigned char buffer[4];
|
|
|
|
size_t ret = fread(buffer, sizeof(*buffer), ARRAY_SIZE(buffer), fp);
|
|
if (ret != ARRAY_SIZE(buffer)) {
|
|
fprintf(stderr, "fread() failed: %zu\en", ret);
|
|
exit(EXIT_FAILURE);
|
|
}
|
|
|
|
printf("ELF magic: %#04x%02x%02x%02x\en", buffer[0], buffer[1],
|
|
buffer[2], buffer[3]);
|
|
|
|
ret = fread(buffer, 1, 1, fp);
|
|
if (ret != 1) {
|
|
fprintf(stderr, "fread() failed: %zu\en", ret);
|
|
exit(EXIT_FAILURE);
|
|
}
|
|
|
|
printf("Class: %#04x\en", buffer[0]);
|
|
|
|
fclose(fp);
|
|
|
|
exit(EXIT_SUCCESS);
|
|
}
|
|
.EE
|
|
.SH SEE ALSO
|
|
.BR read (2),
|
|
.BR write (2),
|
|
.BR feof (3),
|
|
.BR ferror (3),
|
|
.BR unlocked_stdio (3)
|