📄 stdio.h
字号:
/* * stdio.h * * Definitions of types and prototypes of functions for standard input and * output. * * NOTE: The file manipulation functions provided by Microsoft seem to * work with either slash (/) or backslash (\) as the path separator. * * This file is part of the Mingw32 package. * * Contributors: * Created by Colin Peters <colin@bird.fu.is.saga-u.ac.jp> * * THIS SOFTWARE IS NOT COPYRIGHTED * * This source code is offered for use in the public domain. You may * use, modify or distribute it freely. * * This code is distributed in the hope that it will be useful but * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY * DISCLAMED. This includes but is not limited to warranties of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * * $Revision: 1.9 $ * $Author: khan $ * $Date: 1999/06/15 00:47:30 $ * */#ifndef _STDIO_H_#define _STDIO_H_/* All the headers include this file. */#include <_mingw.h>#define __need_size_t#define __need_NULL#define __need_wchar_t#define __need_wint_t#ifndef RC_INVOKED#include <stddef.h>#endif /* Not RC_INVOKED *//* Some flags for the iobuf structure provided by <paag@tid.es> */#define _IOREAD 1#define _IOWRT 2#define _IORW 4/* * The three standard file pointers provided by the run time library. * NOTE: These will go to the bit-bucket silently in GUI applications! */#define STDIN_FILENO 0#define STDOUT_FILENO 1#define STDERR_FILENO 2/* Returned by various functions on end of file condition or error. */#define EOF (-1)/* * The maximum length of a file name. You should use GetVolumeInformation * instead of this constant. But hey, this works. * * NOTE: This is used in the structure _finddata_t (see io.h) so changing it * is probably not a good idea. */#define FILENAME_MAX (260)/* * The maximum number of files that may be open at once. I have set this to * a conservative number. The actual value may be higher. */#define FOPEN_MAX (20)/* * The maximum size of name (including NUL) that will be put in the user * supplied buffer caName for tmpnam. * NOTE: This has not been determined by experiment, but based on the * maximum file name length above it is probably reasonable. I could be * wrong... */#define L_tmpnam (260)/* * The three possible buffering mode (nMode) values for setvbuf. * NOTE: _IOFBF works, but _IOLBF seems to work like unbuffered... * maybe I'm testing it wrong? */#define _IOFBF 0 /* fully buffered */#define _IOLBF 1 /* line buffered */#define _IONBF 2 /* unbuffered *//* * The buffer size as used by setbuf such that it is equivalent to * (void) setvbuf(fileSetBuffer, caBuffer, _IOFBF, BUFSIZ). */#define BUFSIZ 512/* Constants for nOrigin indicating the position relative to which fseek * sets the file position. Enclosed in ifdefs because io.h could also * define them. (Though not anymore since io.h includes this file now.) */#ifndef SEEK_SET#define SEEK_SET (0)#endif#ifndef SEEK_CUR#define SEEK_CUR (1)#endif#ifndef SEEK_END#define SEEK_END (2)#endif#ifndef RC_INVOKED/* * I used to include stdarg.h at this point, in order to allow for the * functions later on in the file which use va_list. That conflicts with * using stdio.h and varargs.h in the same file, so I do the typedef myself. */#ifndef _VA_LIST#define _VA_LISTtypedef char* va_list;#endif/* * The structure underlying the FILE type. * * I still believe that nobody in their right mind should make use of the * internals of this structure. Provided by Pedro A. Aranda Gutiirrez * <paag@tid.es>. */#ifndef _FILE_DEFINED#define _FILE_DEFINEDtypedef struct _iobuf{ char* _ptr; int _cnt; char* _base; int _flag; int _file; int _charbuf; int _bufsiz; char* _tmpfname;} FILE;#endif /* Not _FILE_DEFINED *//* * The standard file handles */#ifndef __DECLSPEC_SUPPORTEDextern FILE (*__imp__iob)[]; /* A pointer to an array of FILE */#define _iob (*__imp__iob) /* An array of FILE */#else /* __DECLSPEC_SUPPORTED */__MINGW_IMPORT FILE _iob[]; /* An array of FILE imported from DLL. */#endif /* __DECLSPEC_SUPPORTED */#define stdin (&_iob[STDIN_FILENO])#define stdout (&_iob[STDOUT_FILENO])#define stderr (&_iob[STDERR_FILENO])#ifdef __cplusplusextern "C" {#endif/* * File Operations */FILE* fopen (const char* szFileName, const char* szMode);FILE* freopen (const char* szNewFileName, const char* szNewMode, FILE* fileChangeAssociation);int fflush (FILE* fileFlush);int fclose (FILE* fileClose);int remove (const char* szFileName);int rename (const char* szOldFileName, const char* szNewFileName);FILE* tmpfile ();char* tmpnam (char caName[]);char* _tempnam (const char* szPath, const char* szPrefix);#ifndef NO_OLDNAMESchar* tempnam (const char* szPath, const char* szPrefix);#endifint setvbuf (FILE* fileSetBuffer, char* caBuffer, int nMode, size_t sizeBuffer);void setbuf (FILE* fileSetBuffer, char* caBuffer);/* * Formatted Output */int fprintf (FILE* filePrintTo, const char* szFormat, ...);int printf (const char* szFormat, ...);int sprintf (char* caBuffer, const char* szFormat, ...);int vfprintf (FILE* filePrintTo, const char* szFormat, va_list varg);int vprintf (const char* szFormat, va_list varg);int vsprintf (char* caBuffer, const char* szFormat, va_list varg);/* Wide character versions */int fwprintf (FILE* filePrintTo, const wchar_t* wsFormat, ...);int wprintf (const wchar_t* wsFormat, ...);int swprintf (wchar_t* wcaBuffer, const wchar_t* wsFormat, ...);int vfwprintf (FILE* filePrintTo, const wchar_t* wsFormat, va_list varg);int vwprintf (const wchar_t* wsFormat, va_list varg);int vswprintf (wchar_t* wcaBuffer, const wchar_t* wsFormat, va_list varg);/* * Formatted Input */int fscanf (FILE* fileReadFrom, const char* szFormat, ...);int scanf (const char* szFormat, ...);int sscanf (const char* szReadFrom, const char* szFormat, ...);/* Wide character versions */int fwscanf (FILE* fileReadFrom, const wchar_t* wsFormat, ...);int wscanf (const wchar_t* wsFormat, ...);int swscanf (wchar_t* wsReadFrom, const wchar_t* wsFormat, ...);/* * Character Input and Output Functions */int fgetc (FILE* fileRead);char* fgets (char* caBuffer, int nBufferSize, FILE* fileRead);int fputc (int c, FILE* fileWrite);int fputs (const char* szOutput, FILE* fileWrite);int getc (FILE* fileRead);int getchar ();char* gets (char* caBuffer); /* Unsafe: how does gets know how long the * buffer is? */int putc (int c, FILE* fileWrite);int putchar (int c);int puts (const char* szOutput);int ungetc (int c, FILE* fileWasRead);/* Wide character versions */wint_t fgetwc (FILE* fileRead);wint_t fputwc (wchar_t wc, FILE* fileWrite);wint_t ungetwc (wchar_t wc, FILE* fileWasRead);/* * Not exported by CRTDLL.DLL included for reference purposes. */#if 0wchar_t* fgetws (wchar_t* wcaBuffer, int nBufferSize, FILE* fileRead);int fputws (const wchar_t* wsOutput, FILE* fileWrite);int getwc (FILE* fileRead);int getwchar ();wchar_t* getws (wchar_t* wcaBuffer);int putwc (wchar_t wc, FILE* fileWrite);int putws (const wchar_t* wsOutput);#endif /* 0 *//* NOTE: putchar has no wide char equivalent even in tchar.h *//* * Direct Input and Output Functions */size_t fread (void* pBuffer, size_t sizeObject, size_t sizeObjCount, FILE* fileRead);size_t fwrite (const void* pObjArray, size_t sizeObject, size_t sizeObjCount, FILE* fileWrite);/* * File Positioning Functions */int fseek (FILE* fileSetPosition, long lnOffset, int nOrigin);long ftell (FILE* fileGetPosition);void rewind (FILE* fileRewind);/* * An opaque data type used for storing file positions... The contents of * this type are unknown, but we (the compiler) need to know the size * because the programmer using fgetpos and fsetpos will be setting aside * storage for fpos_t structres. Actually I tested using a byte array and * it is fairly evident that the fpos_t type is a long (in CRTDLL.DLL). * Perhaps an unsigned long? TODO? */typedef long fpos_t;int fgetpos (FILE* fileGetPosition, fpos_t* pfpos);int fsetpos (FILE* fileSetPosition, fpos_t* pfpos);/* * Error Functions */void clearerr (FILE* fileClearErrors);int feof (FILE* fileIsAtEnd);int ferror (FILE* fileIsError);void perror (const char* szErrorMessage);#ifndef __STRICT_ANSI__/* * Pipes */FILE* _popen (const char* szPipeName, const char* szMode);int _pclose (FILE* pipeClose);#ifndef NO_OLDNAMESFILE* popen (const char* szPipeName, const char* szMode);int pclose (FILE* pipeClose);#endif/* The wide character version, only available in MSVCRT DLL versions, not * CRTDLL. */#ifdef __MSVCRT__FILE* _wpopen (const wchar_t* szPipeName, const wchar_t* szMode);#ifndef NO_OLDNAMES#if 0FILE* wpopen (const wchar_t* szPipeName, const wchar_t* szMode);#else /* Always true *//* * The above prototypeing is not possible unless the wpopen export is added * to moldnames, which can't be done unless we make separate moldnames.def * files for every supported runtime. For the time being we use a define * instead. Pedro's modified dlltool should take care of this I think. */#define wpopen _wpopen#endif /* Always true */#endif /* not NO_OLDNAMES */#endif /* MSVCRT runtime *//* * Other Non ANSI functions */int _fgetchar ();int _fputchar (int c);FILE* _fdopen (int nHandle, const char* szMode);wint_t _fgetwchar(void);wint_t _fputwchar(wint_t c);int _fileno (FILE* fileGetHandle);int _getw (FILE*);int _putw (int, FILE*);#ifndef _NO_OLDNAMESint fgetchar ();int fputchar (int c);FILE* fdopen (int nHandle, const char* szMode);wint_t fgetwchar(void);wint_t fputwchar(wint_t c);int fileno (FILE* fileGetHandle);int getw (FILE*);int putw (int, FILE*);#endif /* Not _NO_OLDNAMES */#endif /* Not __STRICT_ANSI__ */#ifdef __cplusplus}#endif#endif /* Not RC_INVOKED */#endif /* _STDIO_H_ */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -