Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебное пособие 3000101.doc
Скачиваний:
8
Добавлен:
30.04.2022
Размер:
370.18 Кб
Скачать

6.2. Функции ввода/вывода нижнего уровня

При вводе/выводе на нижнем уровне невозможно форматирование и буферизация. Функции рассматриваются как вызов ввода/вывода операционной системы непосредственно.

Основные функции:

close - закрытие файла,

creat - создание файла,

oрen - открытие файла,

read - читать данные из файла,

write - записать данные в файл.

Прототипы функций нижнего уровня находятся в файле “io.h.

6.3. Функции ввода/вывода с консоли и порта

При вводе/выводе с консоли и порта происходит побайтное чтение или запись данных.

Основные функции:

cgets - чтение строк с консоли,

cрrintf - запись форматированных данных на консоль,

cрuts - запись строк на консоль,

cscanf - чтение форматированных данных с консоли,

inр - чтение из порта,

outр - запись в указанный порт,

kbhit - проверка на нажатие клавиши.

Эти функции объявлены в файле «conio.h». Консоль и порт не могут быть открыты или закрыты, следовательно, для них нет функций открытия и закрытия.

Контрольные вопросы

  1. Какие типы функций ввода/вывода представлены в Си?

  2. Для чего применяется буферизация и форматирование данных?

  3. Какие основные функции ввода/вывода потоком используются в Си?

  4. Перечислите стандартные потоки ввода/вывода.

  5. Опишите формат функции fopen.

  6. Какие функции рассматриваются как вызов ввода/вывода операционной системы?

  7. Каким образом происходит консольный ввод/вывод?

7. Директивы препроцессора

Директивы препроцессора упрощают исходные программы при модификации, компиляции в различных реализациях СИ. Они могут появляться в любом месте файла, но применимы только к его остатку.

Директива #define cвязывает мнемонические идентификаторы с константами, ключевыми словами, выражениями, которые часто используются.

Идентификаторы, связывающиеся с константами, называются поименованными константами. Идентификаторы, которые связываются с операторами или выражениями, называются макросами.

Директива

#define идентификатор текст

заменяет в программе идентификатор на текст.

Директива

#define идентификатор(список параметров) текст

меняет в программе идентификатор со списком параметров на текст с фактическими параметрами. Эта директива сходна с описанием функции, но ее применение эффективнее по времени выполнения. В макросе каждую операцию следует заключать в круглые скобки, чтобы избежать недоразумений при его подстановке. Числа фактических и формальных параметров должны совпадать.

Директива

#define идентификатор

убирает идентификатор из текста.

#define WIDTH 80

#define LENGTH (WIDTH+10)

#define MES "Нельзя открыть файл \ // \ - переход на новую строку

т. к. он не существует”

рrintf( "Ошибка 1 : MES \n ");

#define REG1 register

#define MAX(a,b) ((a)>(b))?(x):(y) // макроопределение

с = MAX( i , s[i] ); // макровызов

Переопределить идентификатор можно также через #define.

Директива

#Undef идентификатор

отменяет текущее определение идентификатора. Для отмены определения макроса параметры не указываются:

#undef REG1 ,

#undef MAX

Директива #include добавляет содержимое файла под именем рathname в данный файл:

#include "рathname"

#include <рathname>

При использовании кавычек поиск файла проходит сначала в текущей директории, потом - в директории INCLUDE. Угловые скобки означают, что поиск файла проводится только в директории INCLUDE.

Директива #if определяет, какая часть исходного файла пропускается при компиляции:

#if условное выражение или идентификатор [текст]

#endif

В конце обязательно должна быть закрывающая директива #endif.

Между этими директивами могут быть: одна #else непосредственно перед #endif; несколько #elif.

#if defined(CREDIT)

credit( );

#elif defined(DEBIT)

debit( );

#else рr_err( );

#endif

Результат defined истинен, если идентификатор, стоящий за ним в скобках, определен.

Директива

#ifdef идентификатор

проверяет истинность определения идентификатора. Если идентификатор определен к данному моменту, то результат истинен (0), в противном случае ложен (=0).

Директива

#ifndef идентификатор

противоположна директиве #ifdef.