Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Керниган, Ричи. Язык C.docx
Скачиваний:
5
Добавлен:
05.05.2019
Размер:
377.71 Кб
Скачать

7.9. Несколько разнообразных функций

Стандартная библиотека предоставляет множество разнооб-

разных функций, некоторые из которых оказываются особенно

полезными. Мы уже упоминали функции для работы со строками:

STRLEN, STRCPY, STRCAT и STRCMP. Вот некоторые другие.

7.9.1. Проверка вида символов и преобразования

Некоторые макросы выполняют проверку символов и преобра-

зования:

SALPHA(C) не 0, если "C" алфавитный символ,

0 - если нет.

SUPPER(C) Не 0, если "C" буква верхнего регистра,

0 - если нет.

SLOWER(C) Не 0, если "C" буква нижнего регистра,

0 - если нет.

SDIGIT(C) Не 0, если "C" цифра,

0 - если нет.

SSPACL(C) Не 0, если "C" пробел, табуляция

или новая строка, 0 - если нет.

OUPPER(C) Преобразует "C" в букву верхнего регистра.

OLOWER(C) Преобразует "C" в букву нижнего регистра.

7.9.2. Функция ungetc

Стандартная библиотека содержит довольно ограниченную

версию функции UNGETCH, написанной нами в главе 4; она назы-

вается UNGETC. В результате обращения

UNGETC(C,FP)

символ "C" возвращается в файл FP. Позволяется возвращать в

каждый файл только один символ. Функция UNGETC может быть

использована в любой из функций ввода и с макросами типа

SCANF, GETC или GETCHAR.

7.9.3. Обращение к системе

Функция SYSTEM(S) выполняет команду, содержащуюся в сим-

вольной строке S, и затем возобновляет выполнение текущей

программы. Содержимое S сильно зависит от используемой опе-

рационной системы. В качестве тривиального примера, укажем,

что на системе UNIX строка

SYSTEM("DATE");

приводит к выполнению программы DATE, которая печатает дату

и время дня.

7.9.4. Управление памятью

Функция CALLOC весьма сходна с функцией ALLOC, использо-

ванной нами в предыдущих главах. В результате обращения

CALLOC(N, SIZEOF(OBJCCT))

возвращается либо указатель пространства, достаточного для

размещения N объектов указанного размера, либо NULL, если

запрос не может быть удволетворен. Отводимая память инициа-

лизируется нулевыми значениями.

Указатель обладает нужным для рассматриваемых объектов

выравниванием, но ему следует приписывать соответствующий

тип, как в

CHAR *CALLOC();

INT *IP;

IP=(INT*) CALLOC(N,SIZEOF(INT));

Функция CFREE(P) освобождает пространство, на которое

указывает "P", причем указатель "P" певоначально должен быть

получен в результате обращения к CALLOC. Здесь нет никаких

ограничений на порядок освобождения пространства, но будет

неприятнейшей ошибкой освободить что-нибудь, что не было по-

лучено обращением к CALLOC.

Реализация программы распределения памяти, подобной

CALLOC, в которой размещенные блоки могут освобождаться в

произвольном порядке, продемонстрирована в главе 8.

* 8. Интерфейс системы unix *

Материал этой главы относится к интерфейсу между с-прог-

раммами и операционной системой UNIX. Так как большинство

пользователей языка "C" работают на системе UNIX, эта глава

окажется полезной для большинства читателей. даже если вы

используете с-компилятор на другой машине, изучение приводи-

мых здесь примеров должно помочь вам глубже проникнуть в ме-

тоды программирования на языке "C".

Эта глава делится на три основные части: ввод/вывод,

система файлов и распределение памяти. Первые две части

предполагают небольшое знакомство с внешними характеристика-

ми системы UNIX.

В главе 7 мы имели дело с системным интерфейсом, который

одинаков для всего многообразия операционных систем. На каж-

дой конкретной системе функции стандартной библиотеки должны

быть написаны в терминах ввода-вывода, доступных на данной

машине. В следующих нескольких разделах мы опишем основную

систему связанных с вводом и выводом точек входа операцион-

ной системы UNIX и проиллюстрируем, как с их помощью могут

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