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




Скачать 45,14 Kb.
НазваниеUnix профессиональное программирование Второе издание У. Ричард Стивене, Стивен а раго 2007 Серия «High tech» У. Ричард Стивене, Стивен А. Раго
страница1/143
Дата03.02.2016
Размер45,14 Kb.
ТипДокументы
  1   2   3   4   5   6   7   8   9   ...   143
HIGH TECH

UNIX

Профессиональное программирование

Второе издание

У.Ричард Стивене, Стивен А Раго


2007

Серия «High tech» У. Ричард Стивене, Стивен А. Раго

UNIX. Профессиональное программирование,

2-е издание

Перевод А. Киселева

Главный редактор А Галунов

Зав. редакцией Я. Макарова

Научный редактор М. Деркачев

Редактор Р.Павлов

Корректор #. Ткачева

Верстка Д. Орлова

Стивене Р., Раго С.

UNIX. Профессиональное программирование, 2-е издание. - СПб.: Символ-Плюс, 2007. - 1040 с, ил. ISBN 5-93286-089-8

«UNIX. Профессиональное программирование» представляет собой подробней­шее справочное руководство для любого профессионального программиста, ра­ботающего с UNIX. Стивену Раго удалось обновить и дополнить текст фундамен­тального классического труда Стивенса, сохранив при этом точность и стиль оригинала. Содержание всех тем, примеров и прикладных программ обновлено в соответствии с последними версиями наиболее популярных реализаций UNIX. Среди важных дополнений главы, посвященные потокам и разработке много­поточных программ, использованию интерфейса сокетов для организации межпроцессного взаимодействия (IPC), а также широкий охват интерфейсов, добавленных в последней версии POSIX.1. Аспекты прикладного программно­го интерфейса разъясняются на простых и понятных примерах, протестирован­ных на 4-х платформах: FreeBSD, Linux, Solaris 9 и Mac OS X 10.3. Описывает­ся множество ловушек, о которых следует помнить при написании программ для различных реализаций UNIX, и показывается, как их избежать, опираясь на стандарты POSIX. 1 и Single UNIX Specification.

ISBN-13:978-5-93286-089-2 ISBN-10:5-93286-089-8 ISBN 0-201-43307-9 (англ)

© Издательство Символ-Плюс, 2007

Authorized translation of the English edition © 2005 Pearson Education, Inc. This translation is published and sold by permission of Pearson Education, Inc., the owner of all rights to publish and sell the same.

Все права на данное издание защищены Законодательством РФ, включая право на полное или час­тичное воспроизведение в любой форме. Все товарные знаки или зарегистрированные товарные зна­ки, упоминаемые в настоящем издании, являются собственностью соответствующих фирм.

Издательство «Символ-Плюс». 199034, Санкт-Петербург, 16 линия, 7,

тел. (812) 324-5353, edit@symbol.ru. Лицензия ЛП N 000054 от 25.12.98.

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

ОК 005-93, том 2; 953000 - книги и брошюры.

Подписано в печать 18.04.2007. Формат 70x10071 б . Печать офсетная.

Объем 65 печ. л. Тираж 2000 экз. Заказ N 4037

Отпечатано с готовых диапозитивов в ГУП «Типография «Наука»

199034, Санкт-Петербург, 9 линия, 12.

Оглавление

Отзывы ко второму и первому изданиям 15

Вступительное слово 17

Предисловия ко второму и первому изданиям 19

1. Обзор операционной системы UNIX 27

  1. Введение 27

  2. Архитектура UNIX 27

  3. Вход в систему 28

  4. Файлы и каталоги 30

  5. Ввод и вывод 35

  6. Программы и процессы 38

  7. Обработка ошибок 41

  8. Идентификация пользователя 44

  9. Сигналы 46




  1. Представление времени 48

  2. Системные вызовы и библиотечные функции 49

  3. Подведение итогов 52

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

  1. Введение 53

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




  1. ISO С 53

  2. IEEEPOSIX 55

  3. Single UNIX Specification 63

  4. FIPS 64

2.3. Реализации UNIX 65

  1. UNIX System V Release 4 65

  2. 4.4BSD 66

  3. FreeBSD 67

  4. Linux 67

  5. Mac OS X 67

  6. Solaris , 68

  7. Прочие версии UNIX 68

2.4. Связь между стандартами и реализациями 68

зление 7

2.5. Пределы 69

  1. Пределы ISO С 70

  2. Пределы POSIX 72

  3. Пределы XSI 74

  4. Функции sysconf, pathconf и fpathconf 75

  5. Неопределенные пределы времени выполнения 84




  1. Необязательные параметры 88

  2. Макроопределения контроля функциональных особенностей .. .92

  3. Элементарные системные типы данных 93

  4. Конфликты между стандартами 94

2.10. Подведение итогов 95

3. Файловый ввод-вывод 96

  1. Введение 96

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

  3. Функция open 97

  4. Функция creat 100

  5. Функция close 101

  6. Функция lseek 101

  7. Функция read 105

  8. Функция write 106

  9. Эффективность операций ввода-вывода 107




  1. Совместное использование файлов. 109

  2. Атомарные операции 113

  3. Функции dup и dup2 115

  4. Функции sync, fsync и fdatasync 117

  5. Функция fcntl 118

  6. Функция ioctl 124

  7. /dev/fd 126

  8. Подведение итогов 127

4. Файлы и каталоги 129

  1. Введение 129

  2. Функции stat, fstat и lstat 129

  3. Типы файлов 130

  4. set-user-ID и set-group-ID 134

  5. Права доступа к файлу 135

  6. Принадлежность новых файлов и каталогов 138

  7. Функция access 139

  8. Функция umask 140

  9. Функции chmod и fchmod 143




  1. Бит sticky 146

  2. Функции chown, fchown и lchown 146

g Оглавление

  1. Размер файла 148

  2. Усечение файлов 149

  3. Файловые системы 150

  4. Функции link, unlink, remove и rename 153

  5. Символические ссылки 157

  6. Функции symlink и readlink 160

  7. Временные характеристики файлов 161

  8. Функция utime 162

  9. Функции mkdir и rmdir 165

  10. Чтение каталогов 167

  11. Функции chdir, fchdir и getcwd 172

  12. Специальные файлы устройств 175

  13. Коротко о битах прав доступа к файлам 177

  14. Подведение итогов 179

5. Стандартная библиотека ввода-вывода 181

  1. Введение 181

  2. Потоки и объекты FILE 181

  3. Стандартные потоки ввода, вывода и сообщений об ошибках. . . 183

  4. Буферизация 183

  5. Открытие потока 186

  6. Чтение из потока и запись в поток 189

  7. Построчный ввод-вывод 192

  8. Эффективность стандартных функций ввода-вывода 193

  9. Ввод-вывод двоичных данных 196




  1. Позиционирование в потоке 198

  2. Форматированный ввод-вывод 199

  3. Подробности реализации 205

  4. Временные файлы 207

  5. Альтернативы стандартной библиотеке ввода-вывода 211

  6. Подведение итогов 212

6. Информация о системе и файлы данных 213

  1. Введение 213

  2. Файл паролей 213

  3. Теневые пароли 217

  4. Файл групп 219

  5. Идентификаторы дополнительных групп 220

  6. Различия реализаций 222

  7. Прочие файлы данных 223

  8. Учет входов в систему 224

  9. Информация о системе 225

9

  1. Функции даты и времени 227

  2. Подведение итогов 232

7. Среда окружения процесса 234

  1. Введение 234

  2. Функция main 234

  3. Завершение работы процесса 235

  4. Аргументы командной строки 240

  5. Список переменных окружения 240

  6. Раскладка памяти программы на языке С 241

  7. Разделяемые библиотеки 243

  8. Распределение памяти 244

  9. Переменные окружения 248




  1. Функции setjump и longjump 252

  2. Функции getrlimit и setrlimit 259

  3. Подведение итогов 264

8. Управление процессами 266

  1. Введение 266

  2. Идентификаторы процесса 266

  3. Функция fork 268

  4. Функция vfork 274

  5. Функция exit 276

  6. Функции wait и waitpid 279

  7. Функция waitid 285

  8. Функции wait3 и wait4 286

  9. Гонка за ресурсами 287




  1. Функция exec 291

  2. Изменение идентификаторов пользователя и группы 298

  3. Интерпретируемые файлы 304

  4. Функция system 308

  5. Учет использования ресурсов процессами 313

  6. Идентификация пользователя 320

  7. Временные характеристики процесса 320

  8. Подведение итогов 323

9. Взаимоотношения между процессами 325

  1. Введение 325

  2. Вход с терминала 325

  3. Вход в систему через сетевое соединение 331

  4. Группы процессов 333

  5. Сессии 335

  6. Управляющий терминал 337

  1. Функции tcgetpgrp, tcsetpgrp и tcgetsid 339

  2. Управление заданиями 340

  3. Выполнение программ командной оболочкой 343




  1. Осиротевшие группы процессов 349

  2. Реализация в FreeBSD 352

  3. Подведение итогов 355

10. Сигналы 356

  1. Введение 356

  2. Концепция сигналов 356

  3. Функция signal 367

  4. Ненадежные сигналы 371

  5. Прерванные системные вызовы 373

  6. Реентерабельные функции 376

  7. Семантика сигнала SIGCLD 379

  8. Надежные сигналы. Терминология и семантика 382

  9. Функции kill и raise 383




  1. Функции alarm и pause 385

  2. Наборы сигналов 391

  3. Функция sigprocmask 393

  4. Функция sigpending 394

  5. Функция sigaction 397

  6. Функции sigsetjmp ij siglongjmp 403

  7. Функция sigsuspend 407

  8. Функция abort 414

  9. Функция system 417

  10. Функция sleep 422

  11. Сигналы управления заданиями 424

  12. Дополнительные возможности 427

  13. Подведение итогов 429

11. Потоки 431

  1. Введение 431

  2. Концепция потоков 431

  3. Идентификация потоков 433

  4. Создание потока 434

  5. Завершение потока 437

  6. Синхронизация потоков 445

  7. Подведение итогов 464

12. Управление потоками 465

  1. Введение 465

  2. Пределы для потоков 465

11

  1. Атрибуты потока 466

  2. Атрибуты синхронизации 472

  3. Реентерабельность 480

  4. Локальные данные потоков 485

  5. Принудительное завершение потоков 490

  6. Потоки и сигналы 494

  7. Потоки и fork 498




  1. Потоки и операции ввода-вывода 502

  2. Подведение итогов 503

13. Процессы-демоны 504

  1. Введение 504

  2. Характеристики демонов 504

  3. Правила программирования демонов 506

  4. Журналирование ошибок 510

  5. Демоны в единственном экземпляре 515

  6. Соглашения для демонов 517

  7. Модель клиент-сервер 522

  8. Подведение итогов 522

14. Расширенные операции ввода-вывода 523

  1. Введение 523

  2. Неблокирующий ввод-вывод 523

  3. Блокировка записей 527

  4. STREAMS 544

  5. Мультиплексирование ввода-вывода 558




  1. Функции select и pselect 561

  2. Функция poll 566

14.6. Асинхронный ввод-вывод 569

  1. Асинхронный ввод-вывод в System V 570

  2. Асинхронный ввод-вывод в BSD 571




  1. Функции readv и writev 571

  2. Функции readn и writen 574

  3. Операции ввода-вывода с отображаемой памятью 576

14.10. Подведение итогов 583

15. Межпроцессное взаимодействие 585

  1. Введение 585

  2. Неименованные каналы 586

  3. Функции рореп и pclose 594

  4. Сопроцессы 601

  5. FIFO 605

  6. XSI IPC 609

<12 Оглавление

  1. Идентификаторы и ключи 610

  2. Структура прав доступа 611

  3. Конфигурируемые пределы 612

  4. Преимущества и недостатки 613




  1. Очереди сообщений 615

  2. Семафоры 621

  3. Разделяемая память 628

15.10. Свойства взаимодействий типа

клиент-сервер 636

15.11. Подведение итогов 639

16. Межпроцессное взаимодействие в сети: сокеты 642

  1. Введение 642

  2. Дескрипторы сокетов 643

  3. Адресация 647




  1. Порядок байтов 647

  2. Форматы адресов 649

  3. Определение адреса 651

  4. Присвоение адресов сокетам 659




  1. Установление соединения 660

  2. Передача данных 664

  3. Параметры сокетов 679

  4. Экстренные данные 682

  5. Неблокирующий и асинхронный ввод-вывод 683

  6. Подведение итогов 684

17. Расширенные возможности IPC 686

  1. Введение 686

  2. Каналы на основе STREAMS 686




  1. Именованные каналы STREAMS 690

  2. Уникальные соединения 691

17.3. Сокеты домена UNIX 695

  1. Именованные сокеты домена UNIX 696

  2. Уникальные соединения 698

17.4. Передача дескрипторов файлов 703

17.4.1. Передача дескрипторов с помощью

каналов STREAMS 705

17.4.2. Передача дескрипторов с помощью

сокетов домена UNIX 708

  1. Сервер открытия файлов, версия 1 717

  2. Сервер открытия файлов, версия 2 723

  3. Подведение итогов 731

13

18. Терминальный ввод-вывод 733

  1. Введение 733

  2. Обзор 733

  3. Специальные символы ввода 742

  4. Получение и изменение характеристик терминала 748

  5. Флаги режимов терминала 749

  6. Команда stty 757

  7. Функции для работы со скоростью передачи 758

  8. Функции управления линией связи 759

  9. Идентификация терминала 760




  1. Канонический режим 766

  2. Неканонический режим 769

  3. Размер окна терминала 776

  4. termcap, terminfo и curses 778

  5. Подведение итогов 779

19. Псевдотерминалы 781

  1. Введение 781

  2. Обзор 781

  3. Открытие устройств псевдотерминалов 788




  1. Псевдотерминалы на основе STREAMS 790

  2. Псевдотерминалы в BSD 793

  3. Псевдотерминалы в Linux 797




  1. Функция pty_fork 799

  2. Программа pty 801

  3. Использование программы pty 806

  4. Дополнительные возможности 814

  5. Подведение итогов 815

20. Библиотека базы данных 818

  1. Введение 818

  2. Предыстория 818

  3. Библиотека 820

  4. Обзор реализации 822

  5. Централизация или децентрализация? 826

  6. Одновременный доступ 828

  7. Сборка библиотеки 829

  8. Исходный код 830

  9. Производительность 858

20.10. Подведение итогов 864

14 Оглавление

21. Взаимодействие с сетевым принтером 866

  1. Введение 866

  2. Протокол печати через Интернет 8б6

  3. Протокол передачи гипертекста 869

  4. Очередь печати 870

  5. Исходный код 872

  6. Подведение итогов 919

A. Прототипы функций 921

B. Различные исходные тексты 956

C. Варианты решения некоторых упражнений 965

Список литературы 1000

Алфавитный указатель 1008

Отзывы ко второму изданию

«Обновление, выполненное Стивеном Раго (Stephen Rago), - это событие, ко­торого давно и с нетерпением ждало все сообщество профессионалов, ис­пользующих в своей работе многоликое семейство UNIX и UNIX-подобных операционных систем. В этом издании исключены устаревшие и добавлены новейшие сведения. Содержание всех тем, примеров и прикладных про­грамм обновлено в соответствии с последними версиями наиболее популяр­ных реализаций UNIX и UNIX-подобных операционных систем. И кроме то­го, при этом полностью сохранен стиль изложения оригинала».

- Мукеш Кэкер (Mukesh Kacker), соучредитель и бывший технический директор Pronto Networks, Inc.

«Один из фундаментальных классических трудов, посвященных програм­мированию для UNIX».

- Эрик С. Раймонд (Eric S. Raymond), автор книги «The Art of UNIX Programming»

«Это издание представляет собой подробнейшее справочное руководство для любого профессионального программиста, работающего с UNIX. Стивену Раго удалось обновить и дополнить текст классического произведения Стивен-са, сохранив при этом точность оригинала. Аспекты прикладного программ­ного интерфейса разъясняются на простых и понятных примерах. В книге также описывается множество ловушек, о которых следует помнить при на­писании программ для различных реализаций UNIX, и показывается, как их избежать, опираясь на соответствующие стандарты, такие как POSIX 1003.1 (редакция от 2004 года) и Single UNIX Specification, Version 3».

- Эндрю Джози (Andrew Josey), директор по сертификации The Open Group и председатель рабочей группы POSIX 1003.1

«Второе издание книги - жизненно необходимый справочник для любого, кто занимается разработкой программ для UNIX. Эту книгу я открываю первой, когда хочу изучить или вспомнить какие-либо из интерфейсов сис­темы. Стивен Раго удачно переработал содержание книги и включил в нее сведения о новейших операционных системах, таких как GNU/Linux и App­le OS X, придерживаясь при этом стиля первого издания - как в смысле удо­бочитаемости, так и в смысле полноты изложения. Для нее всегда найдется место рядом с моим компьютером».

-ДокторБенджаминКуперман (Dr. BenjaminKuperman), колледж г. Свортмора (Swarthmore)

Отзывы к первому изданию

«Книга «Advanced Programming in the UNIX® Environment» обязательно должна быть у любого серьезного программиста, который пишет для UNIX на языке С. По своей основательности, глубине и ясности подачи материала она не имеет себе равных».

~ UniForum Monthly

«Многочисленные читатели рекомендовали мне книгу «Advanced Program­ming in the UNIX® Environment», написанную Ричардом Стивенсом (изда­тельство Addison-Wesley), и я благодарен им за это. Раньше я даже не слы­шал об этой книге, хотя она вышла в свет в 1992 году. Получив экземпляр книги, я с первых же глав был очарован ею».

- Open Systems Today

«Очень понятное и подробное описание внутреннего устройства UNIX вы найдете в книге «Advanced Programming in the UNIX® Environment», напи­санной Ричардом Стивенсом (Addison-Wesley). Она включает в себя множе­ство практических примеров, и я нахожу ее очень полезной при разработке системного программного обеспечения».

- RS/Magazine

Вступительное слово

Почти в каждом интервью или после лекций в какой-то момент мне задают один и тот же вопрос: «Ожидали ли вы, что UNIX продержится так долго?». Разумеется, в ответ я говорю одно и то же: «Нет, для нас это оказалось полной неожиданностью». Некоторые даже подсчитали, что система в том или ином виде существует уже более половины всей жизни компьютерной индустрии.

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

К счастью, система UNIX, которую следует рассматривать как явление, а не только как торговую марку, не просто двигалась вперед, но и сумела занять лидирующее положение. В 70-х и 80-х годах XX века корпорация AT&T бы­ла держателем авторских прав на исходные тексты UNIX, но она всячески поощряла усилия по стандартизации, основанные на системных интерфей­сах и языках. Например, AT&T опубликовала SVID (System V Interface Defi­nition, описание интерфейса System V), которое легло в основу стандарта POSIX и последующих его модификаций. Так случилось, что UNIX смогла достаточно изящным образом приспособиться к работе в сетевом окружении и, может быть, менее элегантно, но все-таки на достаточно приемлемом уровне к работе с графикой. Кроме того, основные интерфейсы ядра UNIX и инструментальные средства уровня пользователя стали технологической основой движения за программное обеспечение, распространяемое с откры­тым исходным кодом.

Существенно то, что статьи и книги, посвященные системе UNIX, всегда бы­ли востребованы, даже в то время, когда программное обеспечение самой системы было запатентовано. Примером может служить книга Мориса Баха (Maurice Bach) «The Design of the Unix Operating System». Честно говоря, я мог бы утверждать, что основная причина такой долговечности системы состоит в ее привлекательности для талантливых авторов, которые стреми­лись объяснить ее красоты и тайны. Брайан Керниган (Brian Kernighan) -один из них, а другой - конечно же, Рич Стивене (Rich Stevens). Первое из­дание этой книги, а также серия его книг, посвященных сетевым технологи-

18 Вступительное слово

ям, справедливо считаются одними из лучших работ и потому пользуются заслуженной популярностью.

Первое издание этой книги вышло в свет еще до того, как получили широкое распространение Linux и другие реализации UNIX с открытыми исходными текстами, берущие свое начало из Беркли, а также когда большинство лю­дей имели лишь модемное подключение к сети. Стив Раго (Steve Rago) тща­тельно выполнил обновление этой книги, чтобы учесть изменения, произо­шедшие в компьютерных технологиях и в стандартах ISO и IEEE с момента выхода первой публикации. Поэтому все примеры в книге обновлены и вновь протестированы.

Это самое достойное второе издание классики.

Деннис Ритчи (Dennis Ritchie)

Мюррей Хилл, Нью Джерси

Март 2005

Предисловие ко второму изданию

Введение

Мой первый контакт с Ричем Стивенсом состоялся по электронной почте, когда я сообщил ему об опечатке в его книге «UNIX Network Programming». Позже он говорил, что я оказался первым, кто прислал ему сообщение о най­денной ошибке. До самой его смерти в 1999 году мы время от времени обмени­вались электронными письмами. Обычно это происходило, когда один из нас задавался каким-либо вопросом и полагал, что другой мог бы на него отве­тить. Мы встречались с ним за обедом на конференциях USENIX и на лекци­ях, которые он читал.

Рич Стивене был другом и настоящим джентльменом. Когда в 1993 году я написал книгу «UNIX System V Network Programming», я подразумевал, что она является версией книги Рича «UNIX Network Programming», ориен­тированной на System V. Благодаря своему характеру Рич охотно взялся за рецензирование моих глав, воспринимая меня не как конкурента, но как коллегу. Мы часто говорили о сотрудничестве над версией его книги «TCP/IP Illustrated», посвященной STREAMS. Если бы события сложились по-ино­му, вероятно, мы сделали бы это, но Ричарда больше нет с нами, поэтому об­новление данной книги я рассматриваю как самую тесную совместную нашу работу.

Когда издательство Addison-Wesley сообщило мне, что оно заинтересовано в обновлении книги Рича, я думал, что дополнений будет не очень много. Да­же по прошествии. 13 лет его работа остается достаточно актуальной. Но со­временный мир UNIX значительно отличается от того, каким он был во вре­мя выхода первого издания книги.

  • Версии System V постепенно вытесняются операционной системой Linux. Основные производители аппаратного обеспечения, поставляющие свою продукцию в комплекте с собственными версиями UNIX, либо выпусти­ли версии своих продуктов для Linux, либо объявили о ее поддержке. ОС Solaris, вероятно, осталась последней наследницей System V Release 4, об­ладающей более или менее заметной долей рынка.

  • После выхода 4.4BSD группа по проведению исследований в области ин­формационных технологий (CSRG - Computing Science Research Group) из Калифорнийского университета в Беркли приняла решение о заверше­нии разработки операционной системы UNIX, однако существует несколь­ко групп добровольцев, которые продолжают осуществлять поддержку общедоступных версий.

20

Предисловие ко второму изданию

  • Появление ОС Linux, поддерживаемой тысячами добровольцев, позволи­ло любому обладать компьютером, оборудованным самыми новейшими устройствами и работающим под управлением UNIX-подобной операци­онной системы, распространяемой с исходными текстами. Успех Linux выглядит не совсем обычно, учитывая, что существует несколько свобод­но распространяемых BSD-альтернатив.

  • В очередной раз проявив себя в качестве инновационной компании, Apple Computer отказалась от устаревшей операционной системы Мае и заме­нила ее системой, созданной на основе Mach и FreeBSD.

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

Когда в 1992 году Рич написал свою книгу «Advanced Programming in the UNIX Environment», я избавился от почти всех руководств по программиро­ванию в UNIX. С тех пор я держу на своем столе две книги: словарь и «Ad­vanced Programming in the UNIX Environment». Надеюсь, что вы найдете это издание книги не менее полезным.

Изменения во втором издании

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

Везде, где это было необходимо, я дополнил описания интерфейсов, которые изменились в результате деятельности по стандартизации. Особенно это за­метно в главе 2, посвященной стандартам. В этом издании мы будем основы­ваться на стандарте POSIX.1 от 2001 года как более универсальном по сравне­нию с версией 1990 года, на которой была основана первая редакция книги. Стандарт ISO С от 1990 года был изменен и дополнен в 1999 году, и некоторые изменения коснулись интерфейсов, описываемых стандартом POSIX.1.

Сегодня спецификация POSIX.1 охватывает намного большее количество интерфейсов. Основные спецификации Single UNIX Specification (опублико­ванные The Open Group, ранее X/Open) вошли в состав POSIX.1. Теперь POSIX.1 включает в себя ряд стандартов 1003.1 и некоторые из предвари­тельных стандартов, опубликованных ранее.

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

Интерфейс сокетов теперь стал частью стандарта POSIX.1. Он обеспечивает единый интерфейс межпроцессного взаимодействия (IPC - Interprocess Com­munication), не зависящий от местонахождения процессов, и его обсуждение является естественным продолжением глав, посвященных IPC.

Предисловие ко второму изданию

21

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

Я изменил некоторые примеры в последних главах, чтобы приблизить их к задачам реальной жизни. Например, в наши дни не многие системы рабо­тают с PostScript-принтерами через последовательный или параллельный порт. Чаще встречается случай, когда доступ к таким принтерам осуществ­ляется посредством сети, поэтому я изменил учебный пример взаимодейст­вия с принтером так, чтобы учесть это обстоятельство.

Глава, посвященная взаимодействию с модемом, потеряла свою актуаль­ность. Однако, чтобы оригинальный материал не был утерян окончательно, он выложен на веб-сайте книги в двух форматах: PostScript (http://www.apue-book.com/lostchapter/modem.ps) и PDF (http://www.apuebook.com/lostchapter/ modem.pdf).

Все исходные тексты примеров из книги также доступны на сайте www.apue-book.com. Большая часть примеров была протестирована на четырех плат­формах:

  1. FreeBSD 5.2.1 - системе, происходящей от 4.4BSD, работающей на про­цессоре Intel Pentium.

  2. Linux 2.4.22 (дистрибутив Mandrake 9.2) - свободно распространяемой UNIX-подобной операционной системе, работающей на процессоре Intel Pentium.

  3. Solaris 9 - происходящей от System V Release 4 системе от Sun Microsys­tems, работающей на 64-битном процессоре UltraSPARCIIi.

  4. Darwin 7.4.0 - системе, основанной на FreeBSD и Mach, которая поддер­живается Apple Mac OS X, версия 10.3, на процессоре PowerPC.

Благодарности

Первое издание этой книги, которое сразу же стало классикой, было полно­стью написано Ричем Стивенсом.

Вероятно, мне не удалось бы справиться с обновлением книги без поддерж­ки моей семьи. Они стоически терпели груды разбросанных повсюду бумаг (определенно их было больше, чем обычно), монополизацию мною большин­ства компьютеров в доме и огромное количество времени, когда мое лицо было спрятано за терминалом. Моя супруга Джин (Jeanne) даже помогла мне, установив Linux на одну из тестовых машин.

Технические рецензенты предложили немало улучшений и исправлений и по­могли удостовериться в правильности содержимого книги. Большое спасибо Дэвиду Бозуму (David Bausum), Дэвиду Борхему (David Boreham), Кейту Востику (Keith Bostic), Марку Эллису (Mark Ellis), Филу Говарду (Phil Ho­ward), Эндрю Джози (Andrew Josey), Мукешу Кэкеру (Mukesh Kacker), Брай-

22 Предисловие к первому изданию

ану Кернигану (Brian Kernighan), Бенгту Клебергу (Bengt Kleberg), Бену Ку-перману (Ben Kuperman), Эрику Рэймонду (Eric Raimond) и Энди Рудофу (AndyRudoff).

Кроме того, я хотел бы поблагодарить Энди Рудофа за ответы на вопросы, касающиеся ОС Solaris, и Денниса Ритчи за то, что он, «зарывшись» в ста­рые бумаги, отвечал на вопросы по истории UNIX. Еще раз хочу поблагода­рить сотрудников издательства Addison-Wesley, с которыми было приятно работать. Спасибо Тиррелу Альбо (Tyrrell Albaugh), Мэри Франц (Магу Franz), Джону Фуллеру (John Fuller), Карен Геттман (Karen Gettman), Джессике Голдстейн (Jessica Goldstein), Норин Реджине (Noreen Regina) и Джону Уэйту (John Wait). Мои благодарности Эвелин Пайл (Evelyn Pyle) за отличную работу по техническому редактированию.

Я также буду благодарен всем читателям, кто пришлет по электронной поч­те свои комментарии, предложения и замечания об ошибках.

Уоррен, Нью Джерси Стивен Раго

Апрель 2005 sar@apuebook.com

Предисловие к первому изданию

Введение

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

Подобно большинству операционных систем, UNIX предоставляет работаю­щим в ней программам разнообразные службы: открытие и чтение файлов, запуск новых программ, выделение областей памяти, получение текущего времени и т. д. Все это называется интерфейсом системных вызовов (system call interface). Дополнительно стандартная библиотека языка С предостав­ляет огромное количество функций, которые используются практически в любой программе, написанной на С (форматированный вывод значений переменных, сравнение строк и тому подобное).

Интерфейс системных вызовов и библиотечные функции традиционно опи­сываются во втором и третьем разделах «Unix Programmer's Manual» (Руко­водства программиста UNIX). Эта книга не дублирует указанные разделы. В ней вы найдете примеры и пояснения, которые отсутствуют в упомянутом руководстве.

Предисловие к первому изданию

23

Стандарты UNIX

Быстрый рост количества версий UNIX, наблюдавшийся в 80-е годы, был урегулирован различными международными стандартами, которые стали появляться с конца 80-х. К ним относятся стандарт ANSI языка программи­рования С, семейство стандартов IEEE POSIX (которые продолжают разви­ваться и по сей день) и руководство по обеспечению переносимости Х/Ореп.

Данная книга описывает эти стандарты. И не просто описывает, а рассмат­ривает их применительно к популярным реализациям - System V Release 4 и грядущей 4.4BSD. Здесь представлены соответствующие действительно­сти описания, которых зачастую недостает самим стандартам и книгам, ко­торые только описывают стандарты.

Организация книги

Эта книга делится на шесть частей:

  1. Обзор и введение в базовые концепции, связанные с программированием в UNIX, и в терминологию (глава 1). Обсуждение достижений в области стандартизации UNIX и различных реализаций UNIX (глава 2).

  2. Ввод-вывод: небуферизованный ввод-вывод (глава 3), характеристики файлов и каталогов (глава 4), стандартная библиотека ввода-вывода (гла­ва 5) и стандартные системные файлы (глава 6).

  3. Процессы: окружение процессов в UNIX (глава 7), управление процесса­ми (глава 8), взаимоотношения между различными процессами (глава 9) и сигналы (глава 10).

  4. Дополнительно об операциях ввода-вывода: терминальный ввод-вывод (глава 11), расширенные операции ввода-вывода (глава 12) и процессы-демоны (глава 13).

  5. IPC - взаимодействия между процессами (главы 14 и 15).

  6. Примеры: библиотека базы данных (глава 16), взаимодействие с Post­Script-принтером (глава 17), программа работы с модемом (глава 18) и ис­пользование псевдотерминалов (глава 19).

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

Примеры в книге

Данная книга содержит множество примеров - примерно 10 000 строк ис­ходного кода. Все примеры написаны на языке С. Кроме того, примеры на-писаны в соответствии со стандартом ANSI С. Желательно, чтобы при чте-

24

Предисловие к первому изданию

нии этой книги у вас под рукой была копия «Unix Programmer's Manual» (Руководства программиста UNIX) для вашей операционной системы, так как мы часто будем ссылаться на него при обсуждении малопонятных или зависящих от реализации особенностей.

Обсуждение практически каждой функции или системного вызова будет со­провождаться небольшой законченной программой. Это намного проще, чем рассматривать те же функции в больших программах, и позволит нам иссле­довать аргументы и возвращаемые значения. Так как некоторые из малень­ких программ представляют собой достаточно искусственные примеры, мы включили в книгу несколько больших примеров (главы 16,17,18 и 19). Они демонстрируют решение задач, взятых из реальной жизни.

Все примеры программ были включены в текст книги прямо из файлов с ис­ходными текстами. Копии всех примеров в виде файлов вы найдете на ано­нимном сервере FTP по адресу ftp.uu.net, в архиве published /books /stevens.ad-vprog.tar.Z. Вы можете взять эти исходные тексты и экспериментировать с ними в вашей операционной системе.

Перечень систем, использовавшихся для тестирования примеров

К сожалению, все операционные системы находятся в постоянном движе­нии. UNIX не является исключением. Следующая диаграмма показывает процесс эволюции различных версий System V и 4.xBSD.



























4.3 + BSD




4.3BSD




4.3BSDTahoe




4.3BSD Reno




4.4BSD?
















BSD Net 1







BSD Net 2







1

г




1 1

I

1

1

I

i j

1

' У

I

1

1986

t

SVR3.0

1987

t

SVR3.1

' 19

\

SVR

B8 '

f

3.2

1989 '

I

1990 SVR4

I

i I

1991 '

1992

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

Похожие:

Unix профессиональное программирование Второе издание У. Ричард Стивене, Стивен а раго 2007 Серия «High tech» У. Ричард Стивене, Стивен А. Раго iconРичард Харрис Психология массовых коммуникаций 4-е международное издание Санкт-Петербург «прайм-еврознак» «Издательский дом нева»
Книга, которую вы держите в руках, поможет вам открыть для себя много нового, интересного и полезного, в том числе и некоторые секреты...
Unix профессиональное программирование Второе издание У. Ричард Стивене, Стивен а раго 2007 Серия «High tech» У. Ричард Стивене, Стивен А. Раго iconТема: Роль книги в развитии интеллектуальных умений ребенка
«Все, чего я достиг в жизни, стало возможным, благодаря книге». Ричард Бах Задачи собрания
Unix профессиональное программирование Второе издание У. Ричард Стивене, Стивен а раго 2007 Серия «High tech» У. Ричард Стивене, Стивен А. Раго iconСтивен Кинг Бессонница
Посвящается Тэбби… и Эду Куперу, знакомому с правилами игры. И в этом моей вины нет
Unix профессиональное программирование Второе издание У. Ричард Стивене, Стивен а раго 2007 Серия «High tech» У. Ричард Стивене, Стивен А. Раго iconКрестом и мечом
Ричард. В этом смысле он (кого в титуле первой из наших глав мы назвали «викингом во французской культуре») не может остаться безразличным...
Unix профессиональное программирование Второе издание У. Ричард Стивене, Стивен а раго 2007 Серия «High tech» У. Ричард Стивене, Стивен А. Раго iconПерсональный отчет: Союз потребителей финансовых услуг "ФинПотребСоюз"
Стивен Дженнингс пережил "Ренессанс" // Российский бизнес инвестбанкира продан онэксиму за долги 6
Unix профессиональное программирование Второе издание У. Ричард Стивене, Стивен а раго 2007 Серия «High tech» У. Ричард Стивене, Стивен А. Раго iconДжуан Стивен Странности нашего тела. Занимательная анатомия
Автор то серьезно, то с юмором отвечает на любые вопросы читателей, даже на самые наивные или глупые
Unix профессиональное программирование Второе издание У. Ричард Стивене, Стивен а раго 2007 Серия «High tech» У. Ричард Стивене, Стивен А. Раго iconСтивен Гаррисон – Счастливый ребенок
Почему наши счастливые, жизнерадостные и любознательные малыши, получив образование, в большинстве случаев превращаются во взрослых,...
Unix профессиональное программирование Второе издание У. Ричард Стивене, Стивен а раго 2007 Серия «High tech» У. Ричард Стивене, Стивен А. Раго iconЧто есть «личность[2]»?
Его Святейшества. Ричард всячески поддерживает усилия Его Святейшества Далай Ламы XIV в обращении внимания мировой общественности...
Unix профессиональное программирование Второе издание У. Ричард Стивене, Стивен а раго 2007 Серия «High tech» У. Ричард Стивене, Стивен А. Раго iconСтивен Коэн Большевизм и сталинизм "Вопросы философии", 1989, №7, с. 46-72
Каждая великая революция ставит перед учеными кардинальные исторические вопросы. Самый главный, сложный и важный вопрос, поставленный...
Unix профессиональное программирование Второе издание У. Ричард Стивене, Стивен а раго 2007 Серия «High tech» У. Ричард Стивене, Стивен А. Раго iconСтивен Джуан Странности наших фобий. Почему мы боимся летать на самолетах Странности
После терактов в США 11 октября 2001 года многие из нас готовы на все – даже на нарушение законов природы, лишь бы нас защитили от...
Разместите кнопку на своём сайте:
Библиотека


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