Язык Си шаг за шагом — страница 5

  • Просмотров 17646
  • Скачиваний 2168
  • Размер файла 405
    Кб

───────────┘ │ │ │ ├───────┤1 │ │ │ │ ──────────────────────┘ │ │ ├───────┤2 │ │ │ ────────────────────────────┘ │ ├───────┤3 │ │

──────────────────────────────────┘ └───────┘ Приложение 3. Стандартная библиотека ввода-вывода ───────────────────────────────────────────────── 1. Заголовочный файл

библиотеки ┌ #include <stdio.h> 2. Определение символа "конец файла" и NULL-указатель ┌ #define NULL 0 #define EOF -1 3. Определение дескриптора открытого файла в stdio.h ┌ typedef struct { ... unsigned flags; // Флаги состояния ───────────────┐ char fd; // Номер открытого файла (handle) │ unsigned char hold; // Возвращенный символ │ short bsize; // Размер внутреннего буфера │ unsigned char *buffer,*curp; │ ... // и его указатели │ } FILE;

──── Определение типа "Дескриптор файла" │ (описатель потока) │ ┌─── Флаги состояния - биты, определенные через define ───┘ │ _F_RDWR - открыт для чтения и записи _F_READ - открыт только для чтения _F_WRIT - открыт только для записи _F_BUF - имеет динамически выделенный буфер данных _F_LBUF - построчная буферизация _F_ERR - обнаружена ошибка при выполнении операции _F_EOF - обнаружен конец файла при выполнении

операции _F_BIN - двоичный (прозрачный) режим _F_IN - выполняется операция чтения _F_OUT - выполняется операция записи _F_TERM - файл открыт на терминале 4. Проверка флагов состояния в дескрипторе файла ┌ FILE *fd; ... if (fd->flags & _F_BIN) ... 5. Макроопределения и функции проверки флагов состояния

┌───────────────────────────────────────────────────────┐ │ #define ferror(pf) ((pf)->flags & _F_ERR) │ │ #define feof(pf) ((pf)->flags & _F_EOF) │ │ #define fileno(pf) ((pf)->fd) │ │ void clearerr(FILE *pf) - сбросить _F_EER и _F_EOF │