xref: /csrg-svn/lib/libc/stdio/stdio.3 (revision 20455)
Copyright (c) 1980 Regents of the University of California.
All rights reserved. The Berkeley software License Agreement
specifies the terms and conditions for redistribution.

@(#)stdio.3 4.1 (Berkeley) 05/15/85

STDIO 3S
C 4
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 efficient user-level buffering scheme. The in-line macros getc and putc (3) handle characters quickly. The higher level routines "gets, fgets, scanf, fscanf, fread," "puts, fputs, printf, fprintf, fwrite" all use getc and putc; they can be freely intermixed.

A file with associated buffering is called a stream, and is declared to be a pointer to a defined type FILE. Fopen (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 standard open files:

10n stdin standard input file

.ns

stdout standard output file

.ns

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 definitions. 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: getc, getchar, putc, putchar, feof, ferror, fileno .

"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 fopen, input (output) has been attempted on an output (input) stream, or a FILE pointer designates corrupt or otherwise unintelligible FILE data.

For purposes of efficiency, this implementation of the standard 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 read (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 read (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 necessary to fflush (3) the standard output before going off and computing so that the output will appear.