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

Язык С
Строк программы, исключая математическое обеспечение Является учебным введением в центральную часть языка “C” Hачинаем. Единственный способ освоить новый язык Оператор FOR Набор полезных программ Подсчет символов Подсчет слов Функции Аргументы - вызов по значению Область действия: внешние переменные Резюме Константы Описания Преобразование типов До 9 и буквы от а до F Операции и выражения присваивания Старшинство и порядок вычисления Операторы и блоки Переключатель Цикл DO - WHILE Оператор CONTINUE Основные сведения Функции, возвращающие нецелые значения Еще об аргументах функций Правила, определяющие область действия Статические переменные Блочная структура Рекурсия Указатели и адреса Указатели и массивы Адресная арифметика Указатели символов и функции Указатели - не целые До 12, а не от 0 до 11. Так как за экономию памяти у нас пока не награждают, такой способ проще, чем подгонка индек-сов Инициализация массивов указателей Указатели на функции Структуры Структуры и функции Указатели на структуры Мы продемонстрируем, как правильно выполнить эту задачу Поля Определение типа Обращение к стандартной библиотеке Форматный вывод - функция PRINTF Форматный ввод - функция SCANF Форматное преобразование в памяти Обработка ошибок - STDERR и EXIT Обращение к системе Низкоуровневый ввод/вывод - операторы READ и WRITE Произвольный доступ - SEEK и LSEEK Пример - распечатка справочников Пример - распределитель памяти Константы Синтаксическая нотация Преобразования Первичные выражения Унарные операции Аддитивные операции Операция присваивания Спецификаторы типа Описание структур и объединений Инициализация TYPEDEF Оператор SWITCH Внешнее определение функции Область действия внешних идентификаторов Неявные описания Явные преобразования указателей Анахронизмы Операторы
439386
знаков
0
таблиц
0
изображений

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.

·     167 -

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

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

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

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

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

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

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

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

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

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

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

ми системы UNIX.

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

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

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

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

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

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

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

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

 

8.1. Дескрипторы файлов

В операционной системе UNIX весь ввод и вывод осуществ-

ляется посредством чтения файлов или их записи, потому что

все периферийные устройства, включая даже терминал пользова-

теля, являются файлами определенной файловой системы. Это

означает, что один однородный интерфейс управляет всеми свя-

зями между программой и периферийными устройствами.

В наиболее общем случае перед чтением из файла или за-

писью в файл необходимо сообщить системе о вашем намерении;

этот процесс называется “открытием” файла. Система выясня-

ет,имеете ли вы право поступать таким образом (существует ли

этот файл? имеется ли у вас разрешение на обращение к не-

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

положительное целое число, называемое дескриптором файла.

всякий раз, когда этот файл используется для ввода или выво-

да, для идентификации файла употребляется дескриптор файла,

а не его имя. (Здесь существует примерная аналогия с исполь-

зованием READ (5,...) и WRITE (6,...) в фортране). Вся ин-

формация об открытом файле содержится в системе; программа

пользователя обращается к файлу только через дескриптор фай-

ла.

Для удобства выполнения обычных операций ввода и вывода

с помощью терминала пользователя существуют специальные сог-

лашения. Когда интерпретатор команд (“SHELL”) прогоняет

программу, он открывает три файла, называемые стандартным

вводом, стандартным выводом и стандартным выводом ошибок,

которые имеют соответственно числа 0, 1 и 2 в качестве деск-

рипторов этих файлов. В нормальном состоянии все они связаны

с терминалом, так что если программа читает с дескриптором

файла 0 и пишет с дескрипторами файлов 1 и 2, то она может

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

об открытии соответствующих файлов.


·     168 -

Пользователь программы может перенаправлять ввод и вывод

на файлы, используя операции командного интерпретатора SHELL

“<” и “>” :

PROG <INFILE>OUTFILE

В этом случае интерпретатор команд SHELL изменит присваива-

ние по умолчанию дескрипторов файлов 0 и 1 с терминала на

указанные файлы. Нормально дескриптор файла 2 остается свя-

занным с терминалом, так что сообщения об ошибках могут пос-

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

ввод и вывод связан с каналом. Следует отметить, что во всех

случаях прикрепления файлов изменяются интерпретатором

SHELL, а не программой. Сама программа, пока она использует

файл 0 для ввода и файлы 1 и 2 для вывода, не знает ни отку-

да приходит ее ввод, ни куда поступает ее выдача.


Информация о работе «Язык С»
Раздел: Информатика, программирование
Количество знаков с пробелами: 439386
Количество таблиц: 0
Количество изображений: 0

Похожие работы

Скачать
48443
0
0

... основаниям. При этом философская абстракция языка оказывается неразрывно связана с основными темами и движениями философии в целом. Более конкретно, на ранние стадии традиционно рассматриваемого в рамках АФ анализа обыденного языка глубокое влияние оказала философия Дж. Э. Мура, особенно его учение о здравом смысле, согласно которому такие понятия, как «человек», «мир», «я», «внешний мир», « ...

Скачать
43709
0
0

... и других странах СНГ, а также облегчение доступа к русской и мировой культуре и науке. Таким образом, судя по данным наших исследований, востребованность русского языка осталась в республике достаточно высокой. Многие представители современной молдавской молодежи продолжают, как их отцы и деды, тянуться к русской культуре, научным и техническим достижениям России. Русский язык остается языком ...

Скачать
39778
0
1

... рисуночное словесно-слоговое письмо). Памятники среднеэламского периода (14—12 вв. до н.э.) выполнены аккадской клинописью. Памятники новоэламского периода относятся к 8—6 вв. до н.э. Был официальным языком в персидском государстве Ахеменидов в 6—4 вв. предполагается, что он, подвергшись влиянию древнеперсидского, сохранился до раннего средневековья. 7. Бурушаски язык Язык бурушаски ( ...

Скачать
64931
0
0

... /диалект), скифский, согдийский, среднеперсидский, таджикский, таджриши (язык/диалект), талышский, татский, хорезмийский, хотаносакский, шугнано-рушанская группа языков, ягнобский, язгулямский и др. Они относятся к индоиранской ветви индоевропейских языков. Области распространения: Иран, Афганистан, Таджикистан, некоторые районы Ирака, Турции, Пакистана, Индии, Грузии, Российской Федерации. Общее ...

0 комментариев


Наверх