2022-07-31 09:11:28 +00:00
|
|
|
|
2022-06-06 10:49:19 +00:00
|
|
|
#pragma once
|
|
|
|
|
2022-06-08 01:46:36 +00:00
|
|
|
#include <stdarg.h>
|
2022-08-04 09:47:38 +00:00
|
|
|
|
2023-02-15 07:37:23 +00:00
|
|
|
// 7.23.3 p.2: Header version
|
|
|
|
#define __STDC_VERSION_STDIO_H__ 202311L
|
2022-08-04 09:47:38 +00:00
|
|
|
|
2023-02-15 07:37:23 +00:00
|
|
|
// 7.23.3 p.3: Types
|
2022-08-04 09:47:38 +00:00
|
|
|
#if defined(_WIN32)
|
|
|
|
typedef unsigned long long size_t;
|
|
|
|
#else
|
|
|
|
typedef unsigned long size_t;
|
|
|
|
#endif
|
|
|
|
|
2022-06-02 06:28:17 +00:00
|
|
|
typedef struct FILE FILE;
|
2022-07-23 21:58:09 +00:00
|
|
|
|
|
|
|
typedef struct {
|
2022-08-05 11:47:19 +00:00
|
|
|
unsigned long long offset;
|
2023-02-15 07:37:23 +00:00
|
|
|
union {
|
|
|
|
unsigned short leftover;
|
|
|
|
unsigned short high_surrogate;
|
|
|
|
} mbstate;
|
2022-07-23 21:58:09 +00:00
|
|
|
} fpos_t;
|
2022-06-09 09:04:39 +00:00
|
|
|
|
2023-02-15 07:37:23 +00:00
|
|
|
// 7.23.3 p.4: Macros
|
2022-06-07 02:57:57 +00:00
|
|
|
#if !defined(NULL)
|
|
|
|
#define NULL ((void *)0)
|
|
|
|
#endif
|
|
|
|
|
2022-06-21 13:32:46 +00:00
|
|
|
#define _IONBF 0
|
|
|
|
#define _IOFBF 1
|
|
|
|
#define _IOLBF 2
|
|
|
|
#define BUFSIZ 512
|
|
|
|
#define EOF (-1)
|
2023-02-15 07:37:23 +00:00
|
|
|
#define FOPEN_MAX 32
|
2022-06-02 06:28:17 +00:00
|
|
|
|
|
|
|
#ifdef _os_win
|
2022-06-07 02:57:57 +00:00
|
|
|
#define FILENAME_MAX 260
|
2022-06-02 06:28:17 +00:00
|
|
|
#else
|
2022-06-07 02:57:57 +00:00
|
|
|
#define FILENAME_MAX 4096
|
2022-06-02 06:28:17 +00:00
|
|
|
#endif
|
|
|
|
|
2023-02-15 07:37:23 +00:00
|
|
|
#define _PRINTF_NAN_LEN_MAX 20
|
|
|
|
|
2022-06-02 06:28:17 +00:00
|
|
|
#define L_tmpnam FILENAME_MAX
|
|
|
|
|
2022-07-28 14:16:23 +00:00
|
|
|
#define SEEK_SET 0
|
2022-06-02 06:28:17 +00:00
|
|
|
#define SEEK_CUR 1
|
|
|
|
#define SEEK_END 2
|
|
|
|
|
2022-06-07 02:57:57 +00:00
|
|
|
#ifdef _os_win
|
|
|
|
#define TMP_MAX SHORT_MAX
|
|
|
|
#else
|
|
|
|
#define TMP_MAX INT_MAX
|
|
|
|
#endif
|
2022-06-02 06:28:17 +00:00
|
|
|
|
2023-02-15 07:37:23 +00:00
|
|
|
#define stdout _internal_stdout
|
|
|
|
#define stderr _internal_stderr
|
|
|
|
#define stdin _internal_stdin
|
|
|
|
|
|
|
|
extern FILE *_internal_stdout;
|
|
|
|
extern FILE *_internal_stderr;
|
|
|
|
extern FILE *_internal_stdin;
|
2022-06-02 06:28:17 +00:00
|
|
|
|
2022-06-27 02:58:24 +00:00
|
|
|
// File manipulation
|
2022-06-02 06:28:17 +00:00
|
|
|
int remove(const char *filename);
|
|
|
|
int rename(const char *oldname, const char *newname);
|
2022-06-27 02:58:24 +00:00
|
|
|
|
|
|
|
// Opening and closing files
|
2023-02-15 07:37:23 +00:00
|
|
|
char *tmpnam(char *s);
|
|
|
|
FILE *tmpfile(void);
|
2022-06-27 02:58:24 +00:00
|
|
|
FILE *fopen (const char *restrict filename, const char *restrict mode);
|
|
|
|
FILE *freopen(const char *restrict filename, const char *restrict mode, FILE *restrict stream);
|
|
|
|
int fclose (FILE *stream);
|
|
|
|
|
|
|
|
// I/O buffering control
|
|
|
|
void setbuf (FILE *restrict stream, char *restrict buf);
|
|
|
|
int setvbuf (FILE *restrict stream, char *restrict buf, int mode, size_t size);
|
|
|
|
int fflush (FILE *stream);
|
|
|
|
|
|
|
|
// String formatted print
|
|
|
|
int vsnprintf(char *restrict s, size_t n, const char *restrict format, va_list arg);
|
|
|
|
int vsprintf (char *restrict s, const char *restrict format, va_list arg);
|
|
|
|
int snprintf (char *restrict s, size_t n, const char *restrict format, ...);
|
|
|
|
int sprintf (char *restrict s, const char *restrict format, ...);
|
|
|
|
|
|
|
|
// File formatted print
|
|
|
|
int vfprintf (FILE *restrict stream, const char *restrict format, va_list arg);
|
|
|
|
int fprintf (FILE *restrict stream, const char *restrict format, ...);
|
|
|
|
int vprintf (const char *restrict format, va_list arg);
|
|
|
|
int printf (const char *restrict format, ...);
|
|
|
|
|
|
|
|
// String formatted scan
|
|
|
|
int vsscanf(const char *restrict s, const char *restrict format, va_list arg);
|
|
|
|
int vscanf (const char *restrict format, va_list arg);
|
|
|
|
int sscanf (const char *restrict s, const char *restrict format, ...);
|
|
|
|
|
|
|
|
// String formatted scan
|
|
|
|
int vfscanf(FILE *restrict stream, const char *restrict format, va_list arg);
|
|
|
|
int fscanf (FILE *restrict stream, const char *restrict format, ...);
|
|
|
|
int scanf (const char *restrict format, ...);
|
|
|
|
|
|
|
|
// File reading
|
2022-07-23 21:58:09 +00:00
|
|
|
#define getc fgetc
|
2022-06-27 02:58:24 +00:00
|
|
|
int fgetc (FILE *stream);
|
|
|
|
int getchar(void);
|
|
|
|
int ungetc (int c, FILE *stream);
|
|
|
|
char *fgets (char *restrict s, int n, FILE *restrict stream);
|
|
|
|
size_t fread (void *restrict ptr, size_t size, size_t nmemb, FILE *restrict stream);
|
|
|
|
|
2022-07-29 05:46:16 +00:00
|
|
|
// File writing
|
2022-07-23 21:58:09 +00:00
|
|
|
#define putc fputc
|
2022-06-27 02:58:24 +00:00
|
|
|
int fputc (int c, FILE *stream);
|
|
|
|
int putchar(int c);
|
|
|
|
int fputs (const char *restrict s, FILE *restrict stream);
|
|
|
|
int puts (const char *s);
|
|
|
|
size_t fwrite (const void *restrict ptr, size_t size, size_t nmemb, FILE *restrict stream);
|
|
|
|
|
|
|
|
int fgetpos (FILE *restrict stream, fpos_t *restrict pos);
|
|
|
|
int fseek (FILE *stream, long int offset, int whence);
|
|
|
|
int fsetpos (FILE *stream, const fpos_t *pos);
|
|
|
|
long int ftell (FILE *stream);
|
|
|
|
void rewind (FILE *stream);
|
|
|
|
|
2022-06-02 06:28:17 +00:00
|
|
|
void clearerr(FILE *stream);
|
2022-06-27 02:58:24 +00:00
|
|
|
int feof (FILE *stream);
|
|
|
|
int ferror (FILE *stream);
|
|
|
|
void perror (const char *s);
|
2022-06-02 06:28:17 +00:00
|
|
|
|
2022-06-06 10:49:19 +00:00
|
|
|
#if __STDC_WANT_LIB_EXT1__ == 1
|
|
|
|
#define L_tmpnam_s L_tmpnam
|
|
|
|
#define TMP_MAX_S TMP_MAX
|
2022-06-27 02:58:24 +00:00
|
|
|
|
|
|
|
errno_t tmpfile_s(FILE *restrict *restrict streamptr);
|
|
|
|
errno_t tmpnam_s (char *s, rsize_t maxsize);
|
2022-06-02 06:28:17 +00:00
|
|
|
#endif
|