КнигоПровод.Ru25.11.2024

/ИТ-книги

UNIX. Профессиональное программирование. — 2-е изд. — Стивенс Р., Раго С.
UNIX. Профессиональное программирование. — 2-е изд.
Полностью обновлено для UNIX, Linux, BSD и OS X
Стивенс Р., Раго С.
год издания — 2007, кол-во страниц — 1040, ISBN — 978-5-93286-089-2, 0-201-43307-9, тираж — 2000, язык — русский, тип обложки — твёрд. 7БЦ матов., масса книги — 1380 гр., издательство — Символ-Плюс
серия — High tech
цена: 2000.00 рубПоложить эту книгу в корзину
Advanced Programming
in the UNIX Environment

Second Edition
W. Richard Stevens,
Stephen A. Rago
Addison-Wesley 2005

Пер. с англ. А. Киселева

Формат 70x100 1/16. Печать офсетная
ключевые слова — unix, поток, многопоточн, сокет, межпроцессн, ipc, posix, freebsd, linux, solaris, mac, svid, fork, signal, sigcld, демон, клиент-сервер, streams, fifo, семафор

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


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

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

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

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

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

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

Вступительное слово
Деннис Ритчи (Dennis Ritchie)
Мюррей Хилл, Нью Джерси
Март 2005




Ричард Стивенс (W. Richard Stevens) (1951—1999) получил степень магистра вычислительной техники, работал программистом. В 1982 г. защитил Ph.D. по системному проектированию в Аризонском университете. С 1982 по 1990 гг. руководил Вычислительным центром Международной организации здравоохранения в Нью-Хэйвене. В 1990 г. Стивенc начал карьеру консультанта и писателя. Он известен как автор книг «UNIX Network Programming» (в двух томах), которая считается классическим трудом, посвящённым разработке сетевых приложений в среде UNIX, «TCP/IP Illustrated» (в трёх томах) и первого издания этой книги (1992).

Стивен Раго (Stephen A. Rago) — один из разработчиков Bell Laboratories, участвовавших в создании UNIX System V, Release 4, автор книги «UNIX System V Network Programming» (Addison-Wesley, 1993). Он был техническим рецензентом первого издания книги «Advanced Programming in the UNIX Environment». В настоящее время Стивен работает менеджером в компании ЕМС, специализирующейся на файловых серверах и файловых системах.




Более десяти лет профессиональные программисты, пишущие на языке С, полагались лишь на одну книгу, из которой они могли почерпнуть глубокие практические знания о программных интерфейсах UNIX и Linux: «Advanced Programming in the UNIX Environment» Ричарда Стивенса. Теперь его коллега Стивен Раго полностью обновил классический труд с учётом последних технических достижений и добавил сведения об основных современных версиях UNIX и Linux.

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

Среди важных дополнений можно назвать главы, посвящённые потокам и вопросам разработки многопоточных программ, использованию интерфейса сокетов для организации межпроцессного взаимодействия (IPC), а также широкий охват интерфейсов, добавленных в последней версии стандарта P0SIX.1. Практически все примеры протестированы на четырёх наиболее популярных сегодня платформах: FreeBSD 5.2.1, Linux 2.4.22, Solaris 9 и Mac OS X 10.3 компании Apple.

Как и в первом издании, обучение ведётся на примерах, общий объём которых составляет более 10000 строк исходного кода на языке ANSI С. Краткие описания более чем 400 системных вызовов и функций завершаются примерами программ, которые наглядно демонстрируют правила их использования, аргументы и возвращаемые значения. Для закрепления полученных знаний в книге имеется несколько глав, посвящённых рассмотрению конкретных примеров, которые были полностью переработаны с учётом развития современных версий UNIX.

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

ОГЛАВЛЕНИЕ

Отзывы ко второму и первому изданиям15
Вступительное слово17
Предисловия ко второму и первому изданиям19
 
1. Обзор операционной системы UNIX27
 
1.1. Введение27
1.2. Архитектура UNIX27
1.3. Вход в систему28
1.4. Файлы и каталоги30
1.5. Ввод и вывод35
1.6. Программы и процессы38
1.7. Обработка ошибок41
1.8. Идентификация пользователя44
1.9. Сигналы46
1.10. Представление времени48
1.11. Системные вызовы и библиотечные функции49
1.12. Подведение итогов52
 
2. Стандарты и реализации UNIX53
 
2.1. Введение53
2.2. Стандартизация UNIX53
2.2.1. ISO С53
2.2.2. IEEE POSIX55
2.2.3. Single UNIX Specification63
2.2.4. FIPS64
2.3. Реализации UNIX65
2.3.1. UNIX System V Release 465
2.3.2. 4.4BSD66
2.3.3. FreeBSD67
2.3.4. Linux67
2.3.5. Mac OS X67
2.3.6. Solaris68
2.3.7. Прочие версии UNIX68
2.4. Связь между стандартами и реализациями68
2.5. Пределы69
2.5.1. Пределы ISO C70
2.5.2. Пределы POSIX72
2.5.3. Пределы XSI74
2.5.4. Функции sysconf, pathconf и fpathconf75
2.5.5. Неопределённые пределы времени выполнения84
2.6. Необязательные параметры88
2.7. Макроопределения контроля функциональных особенностей92
2.8. Элементарные системные типы данных93
2.9. Конфликты между стандартами94
2.10. Подведение итогов95
 
3. Файловый ввод-вывод96
 
3.1. Введение96
3.2. Дескрипторы файлов96
3.3. Функция open97
3.4. Функция creat100
3.5. Функция close101
3.6. Функция lseek101
3.7. Функция read105
3.8. Функция write106
3.9. Эффективность операций ввода-вывода107
3.10. Совместное использование файлов109
3.11. Атомарные операции113
3.12. Функции dup и dup2115
3.13. Функции sync, fsync и fdatasync117
3.14. Функция fcntl118
3.15. Функция ioctl124
3.16. /dev/fd126
3.17. Подведение итогов127
 
4. Файлы и каталоги129
 
4.1. Введение129
4.2. Функции stat, fstat и lstat129
4.3. Типы файлов130
4.4. set-user-ID и set-group-ID134
4.5. Права доступа к файлу135
4.6. Принадлежность новых файлов и каталогов138
4.7. Функция access139
4.8. Функция umask140
4.9. Функции chmod и fchmod143
4.10. Бит sticky146
4.11. Функции chown, fchown и lchown146
4.12. Размер файла148
4.13. Усечение файлов149
4.14. Файловые системы150
4.15. Функции link, unlink, remove и rename153
4.16. Символические ссылки157
4.17. Функции symlink и readlink160
4.18. Временные характеристики файлов161
4.19. Функция utime162
4.20. Функции mkdir и rmdir165
4.21. Чтение каталогов167
4.22. Функции chdir, fchdir и getcwd172
4.23. Специальные файлы устройств175
4.24. Коротко о битах прав доступа к файлам177
4.25. Подведение итогов179
 
5. Стандартная библиотека ввода-вывода181
 
5.1. Введение181
5.2. Потоки и объекты FILE181
5.3. Стандартные потоки ввода, вывода и сообщений об ошибках183
5.4. Буферизация183
5.5. Открытие потока186
5.6. Чтение из потока и запись в поток189
5.7. Построчный ввод-вывод192
5.8. Эффективность стандартных функций ввода-вывода193
5.9. Ввод-вывод двоичных данных196
5.10. Позиционирование в потоке198
5.11. Форматированный ввод-вывод199
5.12. Подробности реализации205
5.13. Временные файлы207
5.14. Альтернативы стандартной библиотеке ввода-вывода211
5.15. Подведение итогов212
 
6. Информация о системе и файлы данных213
 
6.1. Введение213
6.2. Файл паролей213
6.3. Теневые пароли217
6.4. Файл групп219
6.5. Идентификаторы дополнительных групп220
6.6. Различия реализаций222
6.7. Прочие файлы данных223
6.8. Учёт входов в систему224
6.9. Информация о системе225
6.10. Функции даты и времени227
6.11. Подведение итогов232
 
7. Среда окружения процесса234
 
7.1. Введение234
7.2. Функция main234
7.3. Завершение работы процесса235
7.4. Аргументы командной строки240
7.5. Список переменных окружения240
7.6. Раскладка памяти программы на языке С241
7.7. Разделяемые библиотеки243
7.8. Распределение памяти244
7.9. Переменные окружения248
7.10. Функции setjump и longjump252
7.11. Функции getrlimit и setrlimit259
7.12. Подведение итогов264
 
8. Управление процессами266
 
8.1. Введение266
8.2. Идентификаторы процесса266
8.3. Функция fork268
8.4. Функция vfork274
8.5. Функция exit276
8.6. Функции wait и waitpid279
8.7. Функция waitid285
8.8. Функции wait3 и wait4286
8.9. Гонка за ресурсами287
8.10. Функция exec291
8.11. Изменение идентификаторов пользователя и группы298
8.12. Интерпретируемые файлы304
8.13. Функция system308
8.14. Учёт использования ресурсов процессами313
8.15. Идентификация пользователя320
8.16. Временные характеристики процесса320
8.17. Подведение итогов323
 
9. Взаимоотношения между процессами325
 
9.1. Введение325
9.2. Вход с терминала325
9.3. Вход в систему через сетевое соединение331
9.4. Группы процессов333
9.5. Сессии335
9.6. Управляющий терминал337
9.7. Функции tcgetpgrp, tcsetpgrp и tcgetsid339
9.8. Управление заданиями340
9.9. Выполнение программ командной оболочкой343
9.10. Осиротевшие группы процессов349
9.11. Реализация в FreeBSD352
9.12. Подведение итогов355
 
10. Сигналы356
 
10.1. Введение356
10.2. Концепция сигналов356
10.3. Функция signal367
10.4. Ненадёжные сигналы371
10.5. Прерванные системные вызовы373
10.6. Реентерабельные функции376
10.7. Семантика сигнала SIGCLD379
10.8. Надёжные сигналы. Терминология и семантика382
10.9. Функции kill и raise383
10.10. Функции alarm и pause385
10.11. Наборы сигналов391
10.12. Функция sigprocmask393
10.13. Функция sigpending394
10.14. Функция sigaction397
10.15. Функции sigsetjmp и siglongjmp403
10.16. Функция sigsuspend407
10.17. Функция abort414
10.18. Функция system417
10.19. Функция sleep422
10.20. Сигналы управления заданиями424
10.21. Дополнительные возможности427
10.22. Подведение итогов429
 
11. Потоки431
 
11.1. Введение431
11.2. Концепция потоков431
11.3. Идентификация потоков433
11.4. Создание потока434
11.5. Завершение потока437
11.6. Синхронизация потоков445
11.7. Подведение итогов464
 
12. Управление потоками465
 
12.1. Введение465
12.2. Пределы для потоков465
12.3. Атрибуты потока466
12.4. Атрибуты синхронизации472
12.5. Реентерабельность480
12.6. Локальные данные потоков485
12.7. Принудительное завершение потоков490
12.8. Потоки и сигналы494
12.9. Потоки и fork498
12.10. Потоки и операции ввода-вывода502
12.11. Подведение итогов503
 
13. Процессы-демоны504
 
13.1. Введение504
13.2. Характеристики демонов504
13.3. Правила программирования демонов506
13.4. Журналирование ошибок510
13.5. Демоны в единственном экземпляре515
13.6. Соглашения для демонов517
13.7. Модель клиент-сервер522
13.8. Подведение итогов522
 
14. Расширенные операции ввода-вывода523
 
14.1. Введение523
14.2. Неблокирующий ввод-вывод523
14.3. Блокировка записей527
14.4. STREAMS544
14.5. Мультиплексирование ввода-вывода558
14.5.1. Функции select и pselect561
14.5.2. Функция рoll566
14.6. Асинхронный ввод-вывод569
14.6.1. Асинхронный ввод-вывод в System V570
14.6.2. Асинхронный ввод-вывод в BSD571
14.7. Функции readv и writev571
14.8. Функции readn и writen574
14.9. Операции ввода-вывода с отображаемой памятью576
14.10. Подведение итогов583
 
15. Межпроцессное взаимодействие585
 
15.1. Введение585
15.2. Неименованные каналы586
15.3. Функции рореп и pclose594
15.4. Сопроцессы601
15.5. FIFO605
15.6. XSI IPC609
15.6.1. Идентификаторы и ключи610
15.6.2. Структура прав доступа611
15.6.3. Конфигурируемые пределы612
15.6.4. Преимущества и недостатки613
15.7. Очереди сообщений615
15.8. Семафоры621
15.9. Разделяемая память628
15.10. Свойства взаимодействий типа клиент-сервер636
15.11. Подведение итогов639
 
16. Межпроцессное взаимодействие в сети: сокеты642
 
16.1. Введение642
16.2. Дескрипторы сокетов643
16.3. Адресация647
16.3.1. Порядок байтов647
16.3.2. Форматы адресов649
16.3.3. Определение адреса651
16.3.4. Присвоение адресов сокетам659
16.4. Установление соединения660
16.5. Передача данных664
16.6. Параметры сокетов679
16.7. Экстренные данные682
16.8. Неблокирующий и асинхронный ввод-вывод683
16.9. Подведение итогов684
 
17. Расширенные возможности IPC686
 
17.1. Введение686
17.2. Каналы на основе STREAMS686
17.2.1. Именованные каналы STREAMS690
17.2.2. Уникальные соединения691
17.3. Сокеты домена UNIX695
17.3.1. Именованные сокеты домена UNIX696
17.3.2. Уникальные соединения698
17.4. Передача дескрипторов файлов703
17.4.1. Передача дескрипторов с помощью каналов STREAMS705
17.4.2. Передача дескрипторов с помощью сокетов домена UNIX708
17.5. Сервер открытия файлов, версия 1717
17.6. Сервер открытия файлов, версия 2723
17.7. Подведение итогов731
 
18. Терминальный ввод-вывод733
 
18.1. Введение733
18.2. Обзор733
18.3. Специальные символы ввода742
18.4. Получение и изменение характеристик терминала748
18.5. Флаги режимов терминала749
18.6. Команда stty757
18.7. Функции для работы со скоростью передачи758
18.8. Функции управления линией связи759
18.9. Идентификация терминала760
18.10. Канонический режим766
18.11. Неканонический режим769
18.12. Размер окна терминала776
18.13. termcap, terminfo и curses778
18.14. Подведение итогов779
 
19. Псевдотерминалы781
 
19.1. Введение781
19.2. Обзор781
19.3. Открытие устройств псевдотерминалов788
19.3.1. Псевдотерминалы на основе STREAMS790
19.3.2. Псевдотерминалы в BSD793
19.3.3. Псевдотерминалы в Linux797
19.4. Функция pty_fork799
19.5. Программа pty801
19.6. Использование программы pty806
19.7. Дополнительные возможности814
19.8. Подведение итогов815
 
20. Библиотека базы данных818
 
20.1. Введение818
20.2. Предыстория818
20.3. Библиотека820
20.4. Обзор реализации822
20.5. Централизация или децентрализация?826
20.6. Одновременный доступ828
20.7. Сборка библиотеки829
20.8. Исходный код830
20.9. Производительность858
20.10. Подведение итогов864
 
21. Взаимодействие с сетевым принтером866
 
21.1. Введение866
21.2. Протокол печати через Интернет866
21.3. Протокол передачи гипертекста869
21.4. Очередь печати870
21.5. Исходный код872
21.6. Подведение итогов919
 
A. Прототипы функций921
 
B. Различные исходные тексты956
 
C. Варианты решения некоторых упражнений965
 
Список литературы1000
Алфавитный указатель1008

Книги на ту же тему

  1. UNIX. Справочник, Роббинс А., 2007
  2. UNIX. Практическое пособие администратора, Торчинский Ф., 2003
  3. Linux и UNIX: программирование в shell. Руководство разработчика, Тейнсли Д., 2001
  4. Многоядерное программирование, Эхтер Ш., Робертс Д., 2010
  5. UNIX: Разработка сетевых приложений, Стивенс Р., 2003
  6. UNIX: взаимодействие процессов, Стивенс Р., 2002
  7. Java для Internet в Windows и Linux, Дунаев С. Б., 2004
  8. Объектно-ориентированное программирование в C++. — 4-е изд., Лафоре Р., 2003
  9. Разработка приложений на C++ и С#. Библиотека программиста, Секунов Н. Ю., 2003
  10. Мультипарадигменное проектирование для C++, Коплиен Д., 2005
  11. Современное проектирование на C++: Обобщённое программирование и прикладные шаблоны проектирования, Александреску А., 2015
  12. Программирование на C++ в Linux, Секунов Н. Ю., 2003
  13. Начальный курс C и C++, Березин Б. И., Березин С. Б., 2001
  14. Современные языки и технологии параллельного программирования: Учебник, Гергель В. П., 2012
  15. C++ Boost Graph Library, Сик Д., Ли Л., Ламсдэйн Э., 2006
  16. Язык программирования C. Лекции и упражнения. — 6-е изд., Прата С., 2015
  17. Настройка производительности UNIX-систем, Мусумеси Д. П., Лукидес М., 2003
  18. Запускаем Linux. — 3-е изд., Уэлш М., Далхаймер М. К., Кауфман Л., 2001
  19. Linux. Карманный справочник, Граннеман С., 2007
  20. Linux: основные команды. Карманный справочник, Баррет Д. Д., 2007
  21. Взломы и настройка LINUX. 100 профессиональных советов и инструментов. Практическое пособие, Фликенгер Р., 2006
  22. Использование Linux. — 6-е изд. Специальное издание, Бендел Д., Нейпир Р., 2002
  23. Linux. Справочник, Сивер Э., Спейнауэр С., Фиггинс С., Хекман Д., 2001
  24. Perl для системного администрирования, Бланк-Эдельман Д. Н., 2001
  25. Perl: изучаем глубже. — 2-е изд., Шварц Р. Л., Фой Б., Феникс Т., 2007
  26. Perl & XML. Библиотека программиста, Макинтош Д., Рэй Э. Т., 2003
  27. Perl 6 и Parrot: справочник. — 2-е изд., Рэндал Э., Сугальски Д., Тёч Л., 2005
  28. CGI/Perl: Создание программ для Web, Пэтчетт К., Райт М., 1999
  29. Perl-отладчик. Карманный справочник, Фоули Р., 2005
  30. Профессиональное PHP программирование, 2-е издание, 2003
  31. PHP. Справочник, Хадсон П., 2006
  32. PHP. Сборник рецептов, Скляр Д., Трахтенберг А., 2005
  33. PHP 5. — 2-е изд., перераб. и доп., Котеров Д. В., Костарев А. Ф., 2010
  34. Электронный магазин на Java и XML (+CD-ROM), Брогден Б., Минник К., 2002
  35. Разработка приложений для электронной коммерции на Oracle8i и Java, Заккар М., 2000
  36. Введение в Java-технологию, Сафонов В. О., 2002
  37. Философия Java, Эккель Б., 2001
  38. Java сервлеты и JSP: сборник рецептов, Перри Б. У., 2005
  39. Java в примерах. Справочник, 2-е издание, Флэнаган Д., 2003
  40. Java. Сборник рецептов для профессионалов, Дарвин Я. Ф., 2002
  41. Конструирование распределённых объектов. Методы и средства программирования интероперабельных объектов в архитектурах OMG/CORBA, Microsoft/COM и Java/RMI, Эммерих В., 2002
  42. Генерация операционной системы ОС ЕС, Назаров С. В., Барсуков А. Г., 1985

© 1913—2013 КнигоПровод.Ruhttp://knigoprovod.ru