|
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. Обзор операционной системы UNIX | 27 | | 1.1. Введение | 27 | 1.2. Архитектура UNIX | 27 | 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. Стандарты и реализации UNIX | 53 | | 2.1. Введение | 53 | 2.2. Стандартизация UNIX | 53 | 2.2.1. ISO С | 53 | 2.2.2. IEEE POSIX | 55 | 2.2.3. Single UNIX Specification | 63 | 2.2.4. FIPS | 64 | 2.3. Реализации UNIX | 65 | 2.3.1. UNIX System V Release 4 | 65 | 2.3.2. 4.4BSD | 66 | 2.3.3. FreeBSD | 67 | 2.3.4. Linux | 67 | 2.3.5. Mac OS X | 67 | 2.3.6. Solaris | 68 | 2.3.7. Прочие версии UNIX | 68 | 2.4. Связь между стандартами и реализациями | 68 | 2.5. Пределы | 69 | 2.5.1. Пределы ISO C | 70 | 2.5.2. Пределы POSIX | 72 | 2.5.3. Пределы XSI | 74 | 2.5.4. Функции sysconf, pathconf и fpathconf | 75 | 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. Функция open | 97 | 3.4. Функция creat | 100 | 3.5. Функция close | 101 | 3.6. Функция lseek | 101 | 3.7. Функция read | 105 | 3.8. Функция write | 106 | 3.9. Эффективность операций ввода-вывода | 107 | 3.10. Совместное использование файлов | 109 | 3.11. Атомарные операции | 113 | 3.12. Функции dup и dup2 | 115 | 3.13. Функции sync, fsync и fdatasync | 117 | 3.14. Функция fcntl | 118 | 3.15. Функция ioctl | 124 | 3.16. /dev/fd | 126 | 3.17. Подведение итогов | 127 | | 4. Файлы и каталоги | 129 | | 4.1. Введение | 129 | 4.2. Функции stat, fstat и lstat | 129 | 4.3. Типы файлов | 130 | 4.4. set-user-ID и set-group-ID | 134 | 4.5. Права доступа к файлу | 135 | 4.6. Принадлежность новых файлов и каталогов | 138 | 4.7. Функция access | 139 | 4.8. Функция umask | 140 | 4.9. Функции chmod и fchmod | 143 | 4.10. Бит sticky | 146 | 4.11. Функции chown, fchown и lchown | 146 | 4.12. Размер файла | 148 | 4.13. Усечение файлов | 149 | 4.14. Файловые системы | 150 | 4.15. Функции link, unlink, remove и rename | 153 | 4.16. Символические ссылки | 157 | 4.17. Функции symlink и readlink | 160 | 4.18. Временные характеристики файлов | 161 | 4.19. Функция utime | 162 | 4.20. Функции mkdir и rmdir | 165 | 4.21. Чтение каталогов | 167 | 4.22. Функции chdir, fchdir и getcwd | 172 | 4.23. Специальные файлы устройств | 175 | 4.24. Коротко о битах прав доступа к файлам | 177 | 4.25. Подведение итогов | 179 | | 5. Стандартная библиотека ввода-вывода | 181 | | 5.1. Введение | 181 | 5.2. Потоки и объекты FILE | 181 | 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. Функция main | 234 | 7.3. Завершение работы процесса | 235 | 7.4. Аргументы командной строки | 240 | 7.5. Список переменных окружения | 240 | 7.6. Раскладка памяти программы на языке С | 241 | 7.7. Разделяемые библиотеки | 243 | 7.8. Распределение памяти | 244 | 7.9. Переменные окружения | 248 | 7.10. Функции setjump и longjump | 252 | 7.11. Функции getrlimit и setrlimit | 259 | 7.12. Подведение итогов | 264 | | 8. Управление процессами | 266 | | 8.1. Введение | 266 | 8.2. Идентификаторы процесса | 266 | 8.3. Функция fork | 268 | 8.4. Функция vfork | 274 | 8.5. Функция exit | 276 | 8.6. Функции wait и waitpid | 279 | 8.7. Функция waitid | 285 | 8.8. Функции wait3 и wait4 | 286 | 8.9. Гонка за ресурсами | 287 | 8.10. Функция exec | 291 | 8.11. Изменение идентификаторов пользователя и группы | 298 | 8.12. Интерпретируемые файлы | 304 | 8.13. Функция system | 308 | 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 и tcgetsid | 339 | 9.8. Управление заданиями | 340 | 9.9. Выполнение программ командной оболочкой | 343 | 9.10. Осиротевшие группы процессов | 349 | 9.11. Реализация в FreeBSD | 352 | 9.12. Подведение итогов | 355 | | 10. Сигналы | 356 | | 10.1. Введение | 356 | 10.2. Концепция сигналов | 356 | 10.3. Функция signal | 367 | 10.4. Ненадёжные сигналы | 371 | 10.5. Прерванные системные вызовы | 373 | 10.6. Реентерабельные функции | 376 | 10.7. Семантика сигнала SIGCLD | 379 | 10.8. Надёжные сигналы. Терминология и семантика | 382 | 10.9. Функции kill и raise | 383 | 10.10. Функции alarm и pause | 385 | 10.11. Наборы сигналов | 391 | 10.12. Функция sigprocmask | 393 | 10.13. Функция sigpending | 394 | 10.14. Функция sigaction | 397 | 10.15. Функции sigsetjmp и siglongjmp | 403 | 10.16. Функция sigsuspend | 407 | 10.17. Функция abort | 414 | 10.18. Функция system | 417 | 10.19. Функция sleep | 422 | 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. Потоки и fork | 498 | 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. STREAMS | 544 | 14.5. Мультиплексирование ввода-вывода | 558 | 14.5.1. Функции select и pselect | 561 | 14.5.2. Функция рoll | 566 | 14.6. Асинхронный ввод-вывод | 569 | 14.6.1. Асинхронный ввод-вывод в System V | 570 | 14.6.2. Асинхронный ввод-вывод в BSD | 571 | 14.7. Функции readv и writev | 571 | 14.8. Функции readn и writen | 574 | 14.9. Операции ввода-вывода с отображаемой памятью | 576 | 14.10. Подведение итогов | 583 | | 15. Межпроцессное взаимодействие | 585 | | 15.1. Введение | 585 | 15.2. Неименованные каналы | 586 | 15.3. Функции рореп и pclose | 594 | 15.4. Сопроцессы | 601 | 15.5. FIFO | 605 | 15.6. XSI IPC | 609 | 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. Расширенные возможности IPC | 686 | | 17.1. Введение | 686 | 17.2. Каналы на основе STREAMS | 686 | 17.2.1. Именованные каналы STREAMS | 690 | 17.2.2. Уникальные соединения | 691 | 17.3. Сокеты домена UNIX | 695 | 17.3.1. Именованные сокеты домена UNIX | 696 | 17.3.2. Уникальные соединения | 698 | 17.4. Передача дескрипторов файлов | 703 | 17.4.1. Передача дескрипторов с помощью каналов STREAMS | 705 | 17.4.2. Передача дескрипторов с помощью сокетов домена UNIX | 708 | 17.5. Сервер открытия файлов, версия 1 | 717 | 17.6. Сервер открытия файлов, версия 2 | 723 | 17.7. Подведение итогов | 731 | | 18. Терминальный ввод-вывод | 733 | | 18.1. Введение | 733 | 18.2. Обзор | 733 | 18.3. Специальные символы ввода | 742 | 18.4. Получение и изменение характеристик терминала | 748 | 18.5. Флаги режимов терминала | 749 | 18.6. Команда stty | 757 | 18.7. Функции для работы со скоростью передачи | 758 | 18.8. Функции управления линией связи | 759 | 18.9. Идентификация терминала | 760 | 18.10. Канонический режим | 766 | 18.11. Неканонический режим | 769 | 18.12. Размер окна терминала | 776 | 18.13. termcap, terminfo и curses | 778 | 18.14. Подведение итогов | 779 | | 19. Псевдотерминалы | 781 | | 19.1. Введение | 781 | 19.2. Обзор | 781 | 19.3. Открытие устройств псевдотерминалов | 788 | 19.3.1. Псевдотерминалы на основе STREAMS | 790 | 19.3.2. Псевдотерминалы в BSD | 793 | 19.3.3. Псевдотерминалы в Linux | 797 | 19.4. Функция pty_fork | 799 | 19.5. Программа pty | 801 | 19.6. Использование программы pty | 806 | 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 |
|
Книги на ту же тему- UNIX. Справочник, Роббинс А., 2007
- UNIX. Практическое пособие администратора, Торчинский Ф., 2003
- Linux и UNIX: программирование в shell. Руководство разработчика, Тейнсли Д., 2001
- Многоядерное программирование, Эхтер Ш., Робертс Д., 2010
- UNIX: Разработка сетевых приложений, Стивенс Р., 2003
- UNIX: взаимодействие процессов, Стивенс Р., 2002
- Java для Internet в Windows и Linux, Дунаев С. Б., 2004
- Объектно-ориентированное программирование в C++. — 4-е изд., Лафоре Р., 2003
- Разработка приложений на C++ и С#. Библиотека программиста, Секунов Н. Ю., 2003
- Мультипарадигменное проектирование для C++, Коплиен Д., 2005
- Современное проектирование на C++: Обобщённое программирование и прикладные шаблоны проектирования, Александреску А., 2015
- Программирование на C++ в Linux, Секунов Н. Ю., 2003
- Начальный курс C и C++, Березин Б. И., Березин С. Б., 2001
- Современные языки и технологии параллельного программирования: Учебник, Гергель В. П., 2012
- C++ Boost Graph Library, Сик Д., Ли Л., Ламсдэйн Э., 2006
- Язык программирования C. Лекции и упражнения. — 6-е изд., Прата С., 2015
- Настройка производительности UNIX-систем, Мусумеси Д. П., Лукидес М., 2003
- Запускаем Linux. — 3-е изд., Уэлш М., Далхаймер М. К., Кауфман Л., 2001
- Linux. Карманный справочник, Граннеман С., 2007
- Linux: основные команды. Карманный справочник, Баррет Д. Д., 2007
- Взломы и настройка LINUX. 100 профессиональных советов и инструментов. Практическое пособие, Фликенгер Р., 2006
- Использование Linux. — 6-е изд. Специальное издание, Бендел Д., Нейпир Р., 2002
- Linux. Справочник, Сивер Э., Спейнауэр С., Фиггинс С., Хекман Д., 2001
- Perl для системного администрирования, Бланк-Эдельман Д. Н., 2001
- Perl: изучаем глубже. — 2-е изд., Шварц Р. Л., Фой Б., Феникс Т., 2007
- Perl & XML. Библиотека программиста, Макинтош Д., Рэй Э. Т., 2003
- Perl 6 и Parrot: справочник. — 2-е изд., Рэндал Э., Сугальски Д., Тёч Л., 2005
- CGI/Perl: Создание программ для Web, Пэтчетт К., Райт М., 1999
- Perl-отладчик. Карманный справочник, Фоули Р., 2005
- Профессиональное PHP программирование, 2-е издание, 2003
- PHP. Справочник, Хадсон П., 2006
- PHP. Сборник рецептов, Скляр Д., Трахтенберг А., 2005
- PHP 5. — 2-е изд., перераб. и доп., Котеров Д. В., Костарев А. Ф., 2010
- Электронный магазин на Java и XML (+CD-ROM), Брогден Б., Минник К., 2002
- Разработка приложений для электронной коммерции на Oracle8i и Java, Заккар М., 2000
- Введение в Java-технологию, Сафонов В. О., 2002
- Философия Java, Эккель Б., 2001
- Java сервлеты и JSP: сборник рецептов, Перри Б. У., 2005
- Java в примерах. Справочник, 2-е издание, Флэнаган Д., 2003
- Java. Сборник рецептов для профессионалов, Дарвин Я. Ф., 2002
- Конструирование распределённых объектов. Методы и средства программирования интероперабельных объектов в архитектурах OMG/CORBA, Microsoft/COM и Java/RMI, Эммерих В., 2002
- Генерация операционной системы ОС ЕС, Назаров С. В., Барсуков А. Г., 1985
|
|
|