мета-данные страницы
Это старая версия документа!
stdio.h
заголовочник, объявляющий интерфейс стандартного ввода-вывода в языке C. Предоставляет типы, макросы и функции для работы с потоками, файлами, буферами и форматированным вводом/выводом.
#include <stdio.h> typedef struct FILE FILE; /* абстракция потока ввода/вывода */ extern FILE *stdin; /* стандартный ввод */ extern FILE *stdout; /* стандартный вывод */ extern FILE *stderr; /* стандартный вывод ошибок */ int printf(const char *format, ...); /* форматированный вывод в stdout */ int fprintf(FILE *stream, const char *format, ...); /* форматированный вывод в поток */ int sprintf(char *str, const char *format, ...); /* форматированный вывод в буфер (без огранич.) */ int snprintf(char *str, size_t size, const char *format, ...); /* форматированный вывод в буфер с ограничением */ int scanf(const char *format, ...); /* форматированный ввод из stdin */ int fscanf(FILE *stream, const char *format, ...); /* форматированный ввод из потока */ int sscanf(const char *str, const char *format, ...); /* форматированный ввод из строки */ FILE *fopen(const char *pathname, const char *mode); /* открыть файл */ int fclose(FILE *stream); /* закрыть файл */ size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream); /* чтение блоков */ size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream); /* запись блоков */ int fseek(FILE *stream, long offset, int whence); /* установить позицию в файле */ long ftell(FILE *stream); /* получить текущую позицию */ void rewind(FILE *stream); /* установить позицию в начало и сброс ошибок */ int fflush(FILE *stream); /* сбросить буфер потока */ int fgetc(FILE *stream); /* получить символ из потока (int, EOF) */ int getc(FILE *stream); /* макро/функция, как fgetc */ int getchar(void); /* получить символ из stdin */ char *fgets(char *s, int size, FILE *stream); /* чтение строки в буфер */ int fputc(int c, FILE *stream); /* записать символ в поток */ int putc(int c, FILE *stream); /* макро/функция, как fputc */ int putchar(int c); /* записать символ в stdout */ int fputs(const char *s, FILE *stream); /* записать строку (без добавления '\n') */ int puts(const char *s); /* записать строку и добавить перевод строки */ /* дополнительные полезные функции и макросы (не исчерпывающе) */ int feof(FILE *stream); /* проверка конца файла */ int ferror(FILE *stream); /* проверка флага ошибки */ void clearerr(FILE *stream); /* сброс флагов EOF и ошибки */ int perror(const char *s); /* вывести сообщение об ошибке на stderr */ int remove(const char *pathname); /* удалить файл */ int rename(const char *old, const char *new); /* переименовать файл */ int setvbuf(FILE *stream, char *buf, int mode, size_t size); /* настроить буферизацию */ FILE *tmpfile(void); /* создать временный файл */ char *tmpnam(char *s); /* сгенерировать временное имя */
понятия:
- FILE — поток ввода/вывода.
- stdin, stdout, stderr — стандартные потоки.
- Буферизация — режимы: полная, построчная, безбуферная.
- Форматированные функции — управление представлением данных через спецификаторы формата.
- Блочное чтение/запись — эффективная работа с большими объёмами данных.
- Позиционирование — перемещение и получение смещения в файле.
- Флаги состояния — EOF и ошибка доступны через feof/ferror/clearerr.
- Безопасность — избегать небезопасных функций и неверного использования форматных строк.
особенности:
- Используйте snprintf и fgets вместо sprintf и gets.
- Форматные спецификаторы должны соответствовать типам аргументов.
- Учитывайте различия текстового/бинарного режимов на разных платформах.
- Перед fork выполняйте fflush для корректного управления буферами.
- При работе в многопоточном окружении синхронизируйте последовательные операции при необходимости.
пример использования:
#include <stdio.h> int main(void) { FILE *f = fopen("example.txt", "w"); /* открыть для записи */ if (!f) { perror("fopen"); /* сообщение об ошибке */ return 1; } const char *s = "Пример строки\n"; fputs(s, f); /* записать строку */ fprintf(f, "Число: %d\n", 42); /* форматированный вывод */ fflush(f); /* сброс буфера */ fclose(f); /* закрыть файл */ f = fopen("example.txt", "r"); /* открыть для чтения */ if (!f) return 1; char buf[128]; while (fgets(buf, sizeof buf, f)) { /* читать построчно */ fputs(buf, stdout); /* выводить в stdout */ } fclose(f); return 0; }