Unix профессиональное программирование Второе издание У. Ричард Стивене, Стивен а раго 2007 Серия «High tech» У. Ричард Стивене, Стивен А. Раго




Скачать 17.46 Mb.
НазваниеUnix профессиональное программирование Второе издание У. Ричард Стивене, Стивен а раго 2007 Серия «High tech» У. Ричард Стивене, Стивен А. Раго
страница5/143
Дата конвертации11.01.2013
Размер17.46 Mb.
ТипДокументы
1   2   3   4   5   6   7   8   9   ...   143
темах имеется два системных вызова: один возвращает время, другой - да­ту. Любая специальная обработка, такая как переход на летнее время, вы­полняется ядром или требует вмешательства человека. UNIX предоставляет единственный системный вызов, который возвращает количество секунд, прошедших с начала Эпохи - 0 часов 00 минут 1 января 1970 года по согла­сованному всемирному времени (UTC). Любая интерпретация этого значе­ния, например представление в удобном для человека виде с учетом поясного времени, полностью возлагается на пользовательский процесс. Стандартная библиотека языка С содержит функции практически для любых случаев. Они, например, реализуют различные алгоритмы, учитывающие переход на зимнее или летнее время.

Прикладная программа может обращаться как к системному вызову, так и к библиотечной функции. Кроме того, следует помнить, что библиотечные функции в свою очередь также могут обращаться к системным вызовам. Это наглядно продемонстрировано на рис. 1.3.

Другое отличие системных вызовов от библиотечных функций заключается в том, что системные вызовы обеспечивают лишь минимально необходимую функциональность, тогда как библиотечные функции часто предоставляют более широкие возможности. Мы уже видели это различие на примере сравне­ния системного вызова sbrk с библиотечной функцией malloc. Мы еще столк­немся с этим различием, когда будем сравнивать функции небуферизованного ввода-вывода (глава 3) и стандартные функции ввода-вывода (глава 5).

Системные вызовы управления процессами (fork, exec и wait) обычно вызыва­ются пользовательским процессом напрямую. (Вспомните простую команд­ную оболочку из листинга 1.5.) Но существуют и такие библиотечные функ­ции, которые служат для упрощения самых распространенных случаев: на­пример, функции system и рореп. В разделе 8.3 мы продемонстрируем реализа­цию функции system, выполненную на основе системных вызовов управления процессами. В разделе 10.18 мы дополним этот пример обработкой сигналов.




Пользовательский процесс

Системные вызовы

Ядро

'°«1.3, Различия между библиотечными функциями С и системными вызовами

52 Глава 1. Обзор ОС UNIX

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

1.12. Подведение итогов

Эта глава представляет собой обзорную экскурсию по системе UNIX. Мы да­ли определение некоторых фундаментальных понятий, с которыми столк­немся еще не раз, и привели многочисленные примеры небольших про­грамм, чтобы вы могли представить себе, о чем пойдет речь в этой книге.

Следующая глава рассказывает о стандартизации UNIX и о влиянии деятель­ности в этой области на ее развитие. Стандарты, особенно ISO С и POSIX.1, будут постоянно встречаться нам на протяжении всей книги.

Упражнения

  1. На своей системе проверьте и убедитесь, что каталоги «.» и «..» являют­ся различными каталогами, за исключением корневой директории.

  2. Просмотрите еще раз результат работы примера, представленного лис­тингом 1.4, и объясните, куда пропали процессы с идентификаторами 852 и 853.

  3. Входной аргумент функции ре г го г в разделе 1.7 определен с атрибутом const (в соответствии со стандартом ISO С), в то время как целочислен­ный аргумент функции st re r ro r определен без этого атрибута. Почему?

  4. В функции обработки ошибок err_sys (приложение В) значение еггпо со­храняется в локальной переменной. Почему?

  5. Если предположить, что календарное время хранится в виде 32-битного целого числа со знаком, то в каком году наступит переполнение? Каки­ми способами можно отдалить дату переполнения? Будут ли найденные решения совместимы с существующими приложениями?

  6. Предположим, что время работы процесса хранится в виде 32-битного целого числа со знаком и система отсчитывает 100 тактов в секунду. Че­рез сколько дней наступит переполнение счетчика?

2

Стандарты и реализации UNIX

2.1. Введение

Немалая работа была проделана для стандартизации системы UNIX и языка программирования С. Хотя приложения всегда обладали высокой переноси­мостью между разными версиями UNIX, тем не менее появление многочис­ленных версий UNIX в течение 80-х годов привело к тому, что крупные пользователи, такие как правительство США, были вынуждены призвать разработчиков к выработке стандартов.

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

2.2. Стандартизация UNIX

2.2.1. ISO С

В конце 1989 года был одобрен стандарт ANSI для языка программирова­ния С - ХЗ.159-1989. Этот стандарт также был принят как международный стандарт ISO/IEC 9899:1990. Аббревиатура ANSI расшифровывается как American National Standards Institute (Американский национальный инсти­тут стандартов, представляющий США в Международной организации по стандартизации - International Organization for Standardization, ISO). Аббре­виатура IEC означает International Electrotechnical Commission (Междуна­родная электротехническая комиссия).

Стандарт языка С теперь поддерживается и развивается международной ра­бочей группой ISO/IEC по стандартизации языка программирования С, из-

54

Глава 2. Стандарты и реализации UNIX

вестной как ISO/IEC JTC1/SC22/WG14, или сокращенно WG14. Назначение стандарта ISO С состоит в том, чтобы обеспечить переносимость программ, на­писанных на языке С, на самые различные операционные системы, не только UNIX. Этот стандарт определяет синтаксис и семантику языка, а также со­став стандартной библиотеки [ISO 1999, глава 7; Plauger 1992; Kernighan and Ritchie 1988, приложение В]. Эта библиотека имеет большое значение, потому что все современные версии UNIX, в том числе описанные в этой книге, обяза­ны предоставлять библиотеки функций, определенные стандартом языка С.

В 1999 году стандарт ISO С обновлен и одобрен как ISO/IEC 9899:1999. Он в значительной степени улучшил поддержку приложений, выполняющих чи­словую обработку. Изменения не затронули стандарты POSIX, описываемые в этой книге, за исключением добавления ключевого слова restrict к некото­рым прототипам функций. Это ключевое слово сообщает компилятору, какие ссылки по указателю можно оптимизировать, отмечая объекты, доступ к ко­торым осуществляется из функций только посредством данного указателя.

В большинстве случаев между одобрением стандарта и модификацией про­граммного обеспечения, учитывающей изменения в стандартах, проходит какое-то время. По мере своего развития все системы компиляции добавля­ют или совершенствуют поддержку последней версии стандарта ISO С.

Информацию о текущем уровне соответствия дсс стандарту ISO С от 1999 года вы най­дете по адресу: http://www.gnu.org/software/gcc/c99status.htmi

Библиотеку ISO С можно разбить на 24 раздела, основываясь на именах заго­ловочных файлов, определяемых стандартом. В табл. 2.1 приводится пере­чень заголовочных файлов, определяемых стандартом языка С. Стандарт POSIX.1 включает эти файлы и, кроме того, определяет ряд дополнитель­ных заголовочных файлов. Впоследствии мы перечислим те из них, которые поддерживаются четырьмя реализациями (FreeBSD 5.2.1, Linux 2.4.22, MAC X 10.3 и Solaris 9).



Таблица 2.1. Перечень заголовочных файлов, определяемых стандартом ISO С

Заголовоч­ный файл

FreeBSD 5.2.1

Linux 2.4.22

MAC OS X10.3

Sola­ris 9

Описание













Проверка программных утверждений














Поддержка арифметики комплекс­ных чисел













Типы символов













Коды ошибок (раздел 1.7)















Окружение операций с плавающей точкой













Арифметика с плавающей точкой













Преобразования целочисленных типов

2.2. Стандартизация UNIX

55


Заголовоч­ный файл

FreeBSD 5.2.1

Linux 2.4.22

MAC OS X10.3

Sola-risQ

Описание




























Альтернативные макросы операто­ров отношений

Константы реализации (раздел 2.5)

Классы региональных настроек (ло-калей)

Математические константы

Нелокальные переходы (раздел 7.10)

Сигналы (глава 10)

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

Логический тип и значения

Стандартные определения

Целочисленные типы

Стандартная библиотека ввода-выво­да (глава 5)

Функции общего назначения

Операции над строками

Макроопределения математических операций

Время и дата (раздел 6.10)

Расширенная поддержка многобайт­ных символов

Классификация и функции преобра­зования многобайтных символов

Перечень заголовочных файлов ISO С зависит от версии компилятора языка С, исполь­зуемой в той или иной операционной системе. Изучая табл. 2.1, имейте в виду, что FreeBSD 5.2.1 распространяется с дсс версии 3.3.3, Solaris 9 - с двумя версиями дсс, 2.95.3 и 3.2, Mandrake 9.2 (Linux 2.4.22) - с дсс версии 3.3.1, a MAC OS X 10.3 - с дсс версии 3.3. MAC OS X также включает более старые версии дсс.

2.2.2. IEEE POSIX

POSIX - это семейство стандартов, разработанных организацией IEEE (Insti­tute of Electrical and Electronics Engineers - Институт инженеров электрони­ки и радиотехники). Аббревиатура POSIX расшифровывается как Portable

perating System Interface (Интерфейс переносимой операционной системы), •^начально это название относилось только к стандарту IEEE 1003.1-1988 ^интерфейс операционной системы), но позднее оно стало объединять мно-

ество других стандартов и предварительных стандартов проекта под номе­ром 1003, в том числе командную оболочку и утилиты (1003.2).

56

Глава 2. Стандарты и реализации UNIX

Основной интерес для нас будет представлять стандарт на интерфейс перено­симой операционной системы 1003.1, цель которого состоит в повышении пе­реносимости приложений между различными версиями UNIX. Этот стан­дарт определяет набор услуг, которые должна предоставлять операционная система, если она претендует на звание «POSIX-совместимой». Хотя стан­дарт 1003.1 и базируется на операционной системе UNIX, тем не менее он не ограничивается UNIX и UNIX-подобными операционными системами. Дей­ствительно, некоторые производители проприетарных операционных систем утверждают, что их системы являются POSIX-совместимыми, в то же время сохраняя все свои проприетарные особенности.

Поскольку стандарт 1003.1 определяет интерфейс, а не реализацию, между системными вызовами и библиотечными функциями не делается никаких различий. Стандарт именует все процедуры функциями.

Стандарты продолжают непрерывно развиваться, и 1003.1 не является ис­ключением. Версия этого стандарта от 1988 года, IEEE Standard 1003.1-1988, была дополнена и представлена на рассмотрение Международной организа­ции по стандартизации (ISO). Текст стандарта был полностью переработан, хотя при этом не было добавлено каких-либо новых интерфейсов или особен­ностей. Окончательный документ был опубликован как IEEE Std 1003.1-1990 [IEEE 1990]. Он также является международным стандартом ISO/IEC 9945-1:1990. Обычно этот стандарт называют POSIX.1, и в этой книге также ис­пользуется это обозначение.

Рабочая группа IEEE 1003.1 продолжала вносить изменения в стандарт. В 1993 году была издана пересмотренная версия стандарта IEEE 1003.1. Она включала в себя стандарт 1003.1-1990 и стандарт на расширения реального времени 1003.1Ь-1993. В 1996 году стандарт снова был дополнен и опубли­кован как ISO/IEC 9945-1:1996. В нем появились интерфейсы многопоточ­ного программирования, известные какpthreads (от «POSIX threads», пото­ки стандарта POSIX). В 1999 году с выходом стандарта IEEE Standard 1003.1d-1999 были добавлены улучшенные интерфейсы реального времени. Год спустя был опубликован стандарт IEEE Standard 1003.1J-2000», в кото­ром появились дополнительные улучшенные интерфейсы реального време­ни. В этом же году вышел стандарт IEEE Standard 1003.1q-2000, добавив­ший расширения трассировки событий.

Версия стандарта 1003.1 от 2001 года отличалась от предшествующих версий тем, что она объединила в себе некоторые поправки из стандартов 1003.1, 1003.2 и часть Single UNIX Specification (SUS - единая спецификация UNIX) версии 2 (подробнее об этом стандарте см. в следующем разделе). В оконча­тельный вариант IEEE Standard 1003.1-2001 вошли следующие стандарты:

• ISO/IEC 9945-1 (IEEE Standard 1003.1-1996), который включает в себя

  • IEEE Standard 1003.1-1990

  • IEEE Standard 1003.lb-1993 (расширения реального времени)

  • IEEE Standard 1003.1c-1995 (pthreads)

  • IEEE Standard 1003.H-1995 (список технических опечаток)

22. Стандартизация UNIX

57

  • IEEE РЮОЗЛа предварительный стандарт (пересмотр системных интер­фейсов)

  • IEEE Standard 1003.ld-1999 (улучшенные расширения реального времени)

  • IEEE Standard 1003.1J-2000 (дополнительные улучшенные расширения реального времени)

  • IEEE Standard 1003.lq-2000 (трассировка)

  • IEEE Standard 1003.2d-1994 (пакетные расширения)

  • IEEE PI003.2b предварительный стандарт (дополнительные утилиты)

  • Части стандарта IEEE Standard 1003. lg-2000 (независимые от протокола интерфейсы)

  • ISO/IEC 9945-2 (IEEE Standard 1003.2-1993)

  • Основные спецификации Single UNIX Specification версии 2, которые включают




  • System Interface Definitions, Issue 5 (определения системных интер­фейсов, выпуск 5)

  • Commands and Utilities, Issue 5 (команды и утилиты, выпуск 5)

  • System Interfaces and Headers, Issue 5 (системные интерфейсы и заго­ловочные файлы, выпуск 5)




  • Open Group Technical Standard, Networking Services, Issue 5.2 (техниче­ский стандарт на сетевые службы, выпуск 5.2)

  • ISO/IEC 9899:1999, Programming Languages - С (языки программирова­ния - С)

В табл. 2.2, 2.3 и 2.4 приводятся списки обязательных и дополнительных за­головочных файлов, предусматриваемых стандартом POSIX.l. Поскольку POSIX.l включает стандартные библиотечные функции ISO С, то он также требует наличия заголовочных файлов, перечисленных в табл. 2.1. Все че­тыре таблицы представляют собой перечень заголовочных файлов, которые включены в обсуждаемые здесь реализации операционных систем.

Таблица 2.2. Перечень обязательных заголовочных файлов, определяемых стандартом POSIX



Заголовоч­ный файл

FreeBSD 5.2.1

Linux 2.4.22

MAC OS X10.3

Sola­ris 9

Описание












~

Работа с каталогами (раздел 4.21)














Управление файлами (раздел 3.14)














Шаблоны имен файлов

<9lob.h>












Шаблоны путей файловой системы

<9rp.h>













Файл групп (раздел 6.4)

etdb.h> <Pwd.h>












Операции с распределенной базой системных данных

Файл паролей (раздел 6.2)

58

1   2   3   4   5   6   7   8   9   ...   143

Похожие:

Unix профессиональное программирование Второе издание У. Ричард Стивене, Стивен а раго 2007 Серия «High tech» У. Ричард Стивене, Стивен А. Раго iconСтивене Д. 80 Сознавание: исследуем, экспериментируем, упражняемся/ Пер с англ. А. Пилюгина
Разработка серийного оформления художника В. Щербакова Серия основана в 1999 году

Unix профессиональное программирование Второе издание У. Ричард Стивене, Стивен а раго 2007 Серия «High tech» У. Ричард Стивене, Стивен А. Раго iconРичард Д. Деловые культуры в международном бизнесе. От столкновения к взаимопониманию / Льюис Ричард Д.; пер с англ. Т. А. Нестика
Европа: вчера, сегодня, завтра / ран, Ин-т Европы; отв ред., авт предисл. Н. П. Шмелев. – М.: Экономика, 2002. – 823с

Unix профессиональное программирование Второе издание У. Ричард Стивене, Стивен а раго 2007 Серия «High tech» У. Ричард Стивене, Стивен А. Раго iconРичард Докинз. Эгоистичный ген
Ричард Докинз профессор Оксфордского университета, автор таких известных книг, как "Эгоистический ген", "Слепой часовщик", "Расширенный...

Unix профессиональное программирование Второе издание У. Ричард Стивене, Стивен а раго 2007 Серия «High tech» У. Ричард Стивене, Стивен А. Раго iconСтивен Кинг После заката Стивен Кинг После заката Посвящается Хайди Питлор
Он, бесформенный, присвоил чужую форму. Как такое могло случиться, Остин? Нет, как такое может быть? И почему тогда солнце не померкнет,...

Unix профессиональное программирование Второе издание У. Ричард Стивене, Стивен а раго 2007 Серия «High tech» У. Ричард Стивене, Стивен А. Раго iconРичард Флорида, «Креативный класс: люди, которые меняют будущее». М
Ричард Флорида, «Креативный класс: люди, которые меняют будущее». М.: Классика-xxi, 2005. (Richard Florida, “The Rise of The Creative...

Unix профессиональное программирование Второе издание У. Ричард Стивене, Стивен а раго 2007 Серия «High tech» У. Ричард Стивене, Стивен А. Раго iconРичард Фарсон Менеджмент абсурда. Парадоксы лидерства Публикуется по: © "София", 2001 Перевод с англ. © А. Левицкий Об
Роджерсом (одним из этих проектов был получивший академическую премию документальный фильм "Путешествие в себя"). Ричард Фарсон получил...

Unix профессиональное программирование Второе издание У. Ричард Стивене, Стивен а раго 2007 Серия «High tech» У. Ричард Стивене, Стивен А. Раго iconThe Roles of Intermediaries in Cluster Development: The Thai Experiences from High-Tech and mid-tech manufacturing, knowledge-intensive services, to

Unix профессиональное программирование Второе издание У. Ричард Стивене, Стивен а раго 2007 Серия «High tech» У. Ричард Стивене, Стивен А. Раго iconHigh School/High Tech Program Guide

Unix профессиональное программирование Второе издание У. Ричард Стивене, Стивен а раго 2007 Серия «High tech» У. Ричард Стивене, Стивен А. Раго iconКультура Социогуманитарные исследования Издание второе, дополненное
Борисов С. Б. Человек. Текст. Культура. Социогуманитарные исследования. Издание второе, дополненное. – Шадринск, 2007 – 556 с

Unix профессиональное программирование Второе издание У. Ричард Стивене, Стивен а раго 2007 Серия «High tech» У. Ричард Стивене, Стивен А. Раго iconЕстественно-математические науки. Техника Барр, С. Россыпи головоломок [Текст] / Стивен Барр; пер с англ. Ю. Н. Сударева. М. Мир, 1987. 415 с
Барр, С. Россыпи головоломок [Текст] / Стивен Барр; пер с англ. Ю. Н. Сударева. М. Мир, 1987. 415 с


Разместите кнопку на своём сайте:
lib.convdocs.org


База данных защищена авторским правом ©lib.convdocs.org 2012
обратиться к администрации
lib.convdocs.org
Главная страница