2.9BSD/usr/man/cat3/stdio.3s
STDIO(3S) UNIX Programmer's Manual STDIO(3S)
NAME
stdio - standard buffered input/output package
SYNOPSIS
#include <stdio.h>
FILE *stdin;
FILE *stdout;
FILE *stderr;
DESCRIPTION
The functions described in Sections 3S constitute an effi-
cient user-level buffering scheme. The in-line macros _g_e_t_c
and _p_u_t_c(3) handle characters quickly. The higher level
routines _g_e_t_s, _f_g_e_t_s, _s_c_a_n_f, _f_s_c_a_n_f, _f_r_e_a_d, _p_u_t_s, _f_p_u_t_s,
_p_r_i_n_t_f, _f_p_r_i_n_t_f, _f_w_r_i_t_e all use _g_e_t_c and _p_u_t_c; they can be
freely intermixed.
A file with associated buffering is called a _s_t_r_e_a_m, and is
declared to be a pointer to a defined type FILE. _F_o_p_e_n(3)
creates certain descriptive data for a stream and returns a
pointer to designate the stream in all further transactions.
There are three normally open streams with constant pointers
declared in the include file and associated with the stan-
dard open files:
stdin standard input file
stdout standard output file
stderr standard error file
A constant `pointer' NULL (0) designates no stream at all.
An integer constant EOF (-1) is returned upon end of file or
error by integer functions that deal with streams.
Any routine that uses the standard input/output package must
include the header file <stdio.h> of pertinent macro defini-
tions. The functions and constants mentioned in sections
labeled 3S are declared in the include file and need no
further declaration. The constants, and the following
`functions' are implemented as macros; redeclaration of
these names is perilous: _g_e_t_c, _g_e_t_c_h_a_r, _p_u_t_c, _p_u_t_c_h_a_r, _f_e_o_f,
_f_e_r_r_o_r, _f_i_l_e_n_o.
SEE ALSO
open(2), close(2), read(2), write(2)
DIAGNOSTICS
The value EOF is returned uniformly to indicate that a FILE
pointer has not been initialized with _f_o_p_e_n, input (output)
has been attempted on an output (input) stream, or a FILE
pointer designates corrupt or otherwise unintelligible FILE
Printed 12/9/82 1
STDIO(3S) UNIX Programmer's Manual STDIO(3S)
data.
For purposes of efficiency, this implementation of the stan-
dard library has been changed to line buffer output to a
terminal by default and attempts to do this transparently by
flushing the output whenever a _r_e_a_d(2) from the standard
input is necessary. This is almost always transparent, but
may cause confusion or malfunctioning of programs which use
standard i/o routines but use _r_e_a_d(2) themselves to read
from the standard input.
In cases where a large amount of computation is done after
printing part of a line on an output terminal, it is neces-
sary to _f_f_l_u_s_h(3) the standard output before going off and
computing so that the output will appear.
Printed 12/9/82 2