📄 stdio.h
字号:
/* stdio.h: ANSI 'C' (X3J11 Oct 88) library header, section 4.9 */
/* Copyright (C) Codemist Ltd., 1988-1993 */
/* Copyright 1991-1998 ARM Limited. All rights reserved. */
/*
* RCS $Revision: 1.22.2.3 $
* Checkin $Date: 2001/05/23 21:56:08 $
* Revising $Author: sdouglas $
*/
/*
* stdio.h declares two types, several macros, and many functions for
* performing input and output. For a discussion on Streams and Files
* refer to sections 4.9.2 and 4.9.3 in the above ANSI draft, or to a
* modern textbook on C.
*/
#ifndef __stdio_h
#define __stdio_h
#ifndef __STDIO_DECLS
#define __STDIO_DECLS
#undef __CLIBNS
#ifdef __cplusplus
#ifdef __EDG_RUNTIME_USES_NAMESPACES
namespace std {
#define __CLIBNS std::
#else
#define __CLIBNS ::
#endif /* ifdef __EDG_RUNTIME_USES_NAMESPACES */
extern "C" {
#else
#define __CLIBNS
#endif /* __cplusplus */
#if defined(__cplusplus) || !defined(__STRICT_ANSI__)
/* unconditional in C++ and non-strict C for consistency of debug info */
typedef unsigned int size_t;
#elif !defined(__size_t)
#define __size_t 1
typedef unsigned int size_t; /* see <stddef.h> */
#endif
#undef NULL
#define NULL 0 /* see <stddef.h> */
/* ANSI forbids va_list to be defined here */
typedef int *__va_list[1]; /* keep in step with <stdarg.h> */
typedef struct __fpos_t_struct
{ unsigned long __lo; /* add hi one day */
} fpos_t;
/*
* fpos_t is an object capable of recording all information needed to
* specify uniquely every position within a file.
*/
typedef struct __FILE FILE;
/*
* FILE is an object capable of recording all information needed to control
* a stream, such as its file position indicator, a pointer to its
* associated buffer, an error indicator that records whether a read/write
* error has occurred and an end-of-file indicator that records whether the
* end-of-file has been reached.
* Its structure is not made known to library clients.
*/
#define _IOFBF 0x100 /* fully buffered IO */
#define _IOLBF 0x200 /* line buffered IO */
#define _IONBF 0x400 /* unbuffered IO */
/*
* _IOBIN is the flag passed to _sys_write to denote a binary
* file.
*/
#define _IOBIN 0x04 /* binary stream */
/* Various default file IO buffer sizes */
#define BUFSIZ (512) /* system buffer size (as used by setbuf) */
#define STDIN_BUFSIZ (64) /* default stdin buffer size */
#define STDOUT_BUFSIZ (64) /* default stdout buffer size */
#define STDERR_BUFSIZ (16) /* default stderr buffer size */
#define EOF (-1)
/*
* negative integral constant, indicates end-of-file, that is, no more input
* from a stream.
*/
#define _SYS_OPEN 16
/* _SYS_OPEN defines a limit on the number of open files that is imposed
* by this C library
*/
#define FOPEN_MAX _SYS_OPEN
/*
* an integral constant expression that is the minimum number of files that
* this implementation guarantees can be open simultaneously.
*/
#define FILENAME_MAX 80
/*
* an integral constant expression that is the size of an array of char
* large enough to hold the longest filename string
*/
#define L_tmpnam FILENAME_MAX
/*
* an integral constant expression that is the size of an array of char
* large enough to hold a temporary file name string generated by the
* tmpnam function.
*/
#define SEEK_SET 0 /* start of stream (see fseek) */
#define SEEK_CUR 1 /* current position in stream (see fseek) */
#define SEEK_END 2 /* end of stream (see fseek) */
#define TMP_MAX 256
/*
* an integral constant expression that is the minimum number of unique
* file names that shall be generated by the tmpnam function.
*/
extern FILE __stdin, __stdout, __stderr;
#define stdin (&__CLIBNS __stdin)
/* pointer to a FILE object associated with standard input stream */
#define stdout (&__CLIBNS __stdout)
/* pointer to a FILE object associated with standard output stream */
#define stderr (&__CLIBNS __stderr)
/* pointer to a FILE object associated with standard error stream */
extern int remove(const char * /*filename*/);
/*
* causes the file whose name is the string pointed to by filename to be
* removed. Subsequent attempts to open the file will fail, unless it is
* created anew. If the file is open, the behaviour of the remove function
* is implementation-defined.
* Returns: zero if the operation succeeds, nonzero if it fails.
*/
extern int rename(const char * /*old*/, const char * /*new*/);
/*
* causes the file whose name is the string pointed to by old to be
* henceforth known by the name given by the string pointed to by new. The
* file named old is effectively removed. If a file named by the string
* pointed to by new exists prior to the call of the rename function, the
* behaviour is implementation-defined.
* Returns: zero if the operation succeeds, nonzero if it fails, in which
* case if the file existed previously it is still known by its
* original name.
*/
extern FILE *tmpfile(void);
/*
* creates a temporary binary file that will be automatically removed when
* it is closed or at program termination. The file is opened for update.
* Returns: a pointer to the stream of the file that it created. If the file
* cannot be created, a null pointer is returned.
*/
extern char *tmpnam(char * /*s*/);
/*
* generates a string that is not the same as the name of an existing file.
* The tmpnam function generates a different string each time it is called,
* up to TMP_MAX times. If it is called more than TMP_MAX times, the
* behaviour is implementation-defined.
* Returns: If the argument is a null pointer, the tmpnam function leaves
* its result in an internal static object and returns a pointer to
* that object. Subsequent calls to the tmpnam function may modify
* the same object. if the argument is not a null pointer, it is
* assumed to point to an array of at least L_tmpnam characters;
* the tmpnam function writes its result in that array and returns
* the argument as its value.
*/
extern int fclose(FILE * /*stream*/);
/*
* causes the stream pointed to by stream to be flushed and the associated
* file to be closed. Any unwritten buffered data for the stream are
* delivered to the host environment to be written to the file; any unread
* buffered data are discarded. The stream is disassociated from the file.
* If the associated buffer was automatically allocated, it is deallocated.
* Returns: zero if the stream was succesfully closed, or nonzero if any
* errors were detected or if the stream was already closed.
*/
extern int fflush(FILE * /*stream*/);
/*
* If the stream points to an output or update stream in which the most
* recent operation was output, the fflush function causes any unwritten
* data for that stream to be delivered to the host environment to be
* written to the file. If the stream points to an input or update stream,
* the fflush function undoes the effect of any preceding ungetc operation
* on the stream.
* Returns: nonzero if a write error occurs.
*/
extern FILE *fopen(const char * /*filename*/, const char * /*mode*/);
/*
* opens the file whose name is the string pointed to by filename, and
* associates a stream with it.
* The argument mode points to a string beginning with one of the following
* sequences:
* "r" open text file for reading
* "w" create text file for writing, or truncate to zero length
* "a" append; open text file or create for writing at eof
* "rb" open binary file for reading
* "wb" create binary file for writing, or truncate to zero length
* "ab" append; open binary file or create for writing at eof
* "r+" open text file for update (reading and writing)
* "w+" create text file for update, or truncate to zero length
* "a+" append; open text file or create for update, writing at eof
* "r+b"/"rb+" open binary file for update (reading and writing)
* "w+b"/"wb+" create binary file for update, or truncate to zero length
* "a+b"/"ab+" append; open binary file or create for update, writing at eof
*
* Opening a file with read mode ('r' as the first character in the mode
* argument) fails if the file does not exist or cannot be read.
* Opening a file with append mode ('a' as the first character in the mode
* argument) causes all subsequent writes to be forced to the current end of
* file, regardless of intervening calls to the fseek function. In some
* implementations, opening a binary file with append mode ('b' as the
* second or third character in the mode argument) may initially position
* the file position indicator beyond the last data written, because of the
* NUL padding.
* When a file is opened with update mode ('+' as the second or third
* character in the mode argument), both input and output may be performed
* on the associated stream. However, output may not be directly followed
* by input without an intervening call to the fflush fuction or to a file
* positioning function (fseek, fsetpos, or rewind), and input be not be
* directly followed by output without an intervening call to the fflush
* fuction or to a file positioning function, unless the input operation
* encounters end-of-file. Opening a file with update mode may open or
* create a binary stream in some implementations. When opened, a stream
* is fully buffered if and only if it does not refer to an interactive
* device. The error and end-of-file indicators for the stream are
* cleared.
* Returns: a pointer to the object controlling the stream. If the open
* operation fails, fopen returns a null pointer.
*/
extern FILE *freopen(const char * /*filename*/, const char * /*mode*/,
FILE * /*stream*/);
/*
* opens the file whose name is the string pointed to by filename and
* associates the stream pointed to by stream with it. The mode argument is
* used just as in the fopen function.
* The freopen function first attempts to close any file that is associated
* with the specified stream. Failure to close the file successfully is
* ignored. The error and end-of-file indicators for the stream are cleared.
* Returns: a null pointer if the operation fails. Otherwise, freopen
* returns the value of the stream.
*/
extern void setbuf(FILE * /*stream*/, char * /*buf*/);
/*
* Except that it returns no value, the setbuf function is equivalent to the
* setvbuf function invoked with the values _IOFBF for mode and BUFSIZ for
* size, or (if buf is a null pointer), with the value _IONBF for mode.
* Returns: no value.
*/
extern int setvbuf(FILE * /*stream*/, char * /*buf*/,
int /*mode*/, size_t /*size*/);
/*
* may be used after the stream pointed to by stream has been associated
* with an open file but before it is read or written. The argument mode
* determines how stream will be buffered, as follows: _IOFBF causes
* input/output to be fully buffered; _IOLBF causes output to be line
* buffered (the buffer will be flushed when a new-line character is
* written, when the buffer is full, or when input is requested); _IONBF
* causes input/output to be completely unbuffered. If buf is not the null
* pointer, the array it points to may be used instead of an automatically
* allocated buffer (the buffer must have a lifetime at least as great as
* the open stream, so the stream should be closed before a buffer that has
* automatic storage duration is deallocated upon block exit). The argument
* size specifies the size of the array. The contents of the array at any
* time are indeterminate.
* Returns: zero on success, or nonzero if an invalid value is given for
* mode or size, or if the request cannot be honoured.
*/
#ifdef __EDG__
#pragma __printf_args
#else
#pragma check_printf_formats /* hint to the compiler to check f/s/printf format */
#endif
extern int fprintf(FILE * /*stream*/, const char * /*format*/, ...);
/*
* writes output to the stream pointed to by stream, under control of the
* string pointed to by format that specifies how subsequent arguments are
* converted for output. If there are insufficient arguments for the format,
* the behaviour is undefined. If the format is exhausted while arguments
* remain, the excess arguments are evaluated but otherwise ignored. The
* fprintf function returns when the end of the format string is reached.
* The format shall be a multibyte character sequence, beginning and ending
* in its initial shift state. The format is composed of zero or more
* directives: ordinary multibyte characters (not %), which are copied
* unchanged to the output stream; and conversion specifiers, each of which
* results in fetching zero or more subsequent arguments. Each conversion
* specification is introduced by the character %. For a description of the
* available conversion specifiers refer to section 4.9.6.1 in the ANSI
* draft mentioned at the start of this file or to any modern textbook on C.
* The minimum value for the maximum number of characters producable by any
* single conversion is at least 509.
* Returns: the number of characters transmitted, or a negative value if an
* output error occurred.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -