UNIX. Профессиональное программирование. 3-е изд.
By Уильям Стивенс and Стивен Раго
()
About this ebook
От основ — файлы, каталоги и процессы — вы постепенно перейдете к более сложным вопросам, таким как обработка сигналов и терминальный ввод/вывод, многопоточная модель выполнения и межпроцессное взаимодействие с применением сокетов.
В общей сложности в этой книге охвачены более 70 интерфейсов, включая функции POSIX асинхронного ввода/вывода, циклические блокировки, барьеры и семафоры POSIX.
Related to UNIX. Профессиональное программирование. 3-е изд.
Related ebooks
Внутреннее устройство Windows. 7-е изд. Rating: 0 out of 5 stars0 ratingsРазработка веб-приложений с использованием Flask на языке Python Rating: 0 out of 5 stars0 ratingsKubernetes в действии Rating: 0 out of 5 stars0 ratingsАудит безопасности информационных систем Rating: 0 out of 5 stars0 ratingsKotlin в действии Rating: 0 out of 5 stars0 ratingsПараллельное программирование на C# и .NET Core Rating: 0 out of 5 stars0 ratingsЭффективное использование C++. 55 верных способов улучшить структуру и код ваших программ Rating: 0 out of 5 stars0 ratingsPython. Лучшие практики и инструменты Rating: 0 out of 5 stars0 ratingsРоман с Data Science. Как монетизировать большие данные Rating: 0 out of 5 stars0 ratingsЗнакомство с Python Rating: 0 out of 5 stars0 ratingsСоздание микросервисов. 2-е издание Rating: 0 out of 5 stars0 ratingsKali Linux: библия пентестера Rating: 0 out of 5 stars0 ratingsGo на практике Rating: 0 out of 5 stars0 ratingsScala. Профессиональное программирование. 5-е изд. Rating: 0 out of 5 stars0 ratingsСтруктуры данных в Python: начальный курс Rating: 0 out of 5 stars0 ratingsОбработка естественного языка на Java Rating: 0 out of 5 stars0 ratingsPython. Чистый код для продолжающих Rating: 0 out of 5 stars0 ratingsСоздаем динамические веб-сайты с помощью PHP, MySQL, JavaScript, CSS и HTML5. 5-е изд. Rating: 0 out of 5 stars0 ratingsИскусственный интеллект и компьютерное зрение. Реальные проекты на Python, Keras и TensorFlow Rating: 0 out of 5 stars0 ratingsИзучаем pandas. Высокопроизводительная обработка и анализ данных в Python Rating: 0 out of 5 stars0 ratingsGo: идиомы и паттерны проектирования Rating: 0 out of 5 stars0 ratingsЗапускаем Ansible. Простой способ автоматизации управления конфигурациями и развертыванием приложений Rating: 0 out of 5 stars0 ratingsSpring. Все паттерны проектирования Rating: 0 out of 5 stars0 ratingsОсваиваем Kubernetes. Оркестрация контейнерных архитектур Rating: 0 out of 5 stars0 ratingsПринципы юнит-тестирования Rating: 0 out of 5 stars0 ratingsUnity для разработчика. Мобильные мультиплатформенные игры Rating: 0 out of 5 stars0 ratingsКурс программирования на языке Си : учебник Rating: 0 out of 5 stars0 ratingsAngular и TypeScript. Сайтостроение для профессионалов Rating: 0 out of 5 stars0 ratingsГлубокое обучение на Python Rating: 0 out of 5 stars0 ratingsReact и Redux: функциональная веб-разработка Rating: 0 out of 5 stars0 ratings
Software Development & Engineering For You
Чистая архитектура. Искусство разработки программного обеспечения Rating: 0 out of 5 stars0 ratingsПринципы юнит-тестирования Rating: 0 out of 5 stars0 ratingsПроектирование в AutoCAD 2020 Rating: 0 out of 5 stars0 ratingsРаспределенные системы. Паттерны проектирования Rating: 0 out of 5 stars0 ratingsЧистый код: создание, анализ и рефакторинг Rating: 0 out of 5 stars0 ratingsИзвлекаем пользу из Agile-ретроспектив Rating: 0 out of 5 stars0 ratingsСовременная программная инженерия. ПО в эпоху эджайла и непрерывного развертывания Rating: 0 out of 5 stars0 ratingsСоздание микросервисов. 2-е издание Rating: 0 out of 5 stars0 ratingsОсваиваем Kubernetes. Оркестрация контейнерных архитектур Rating: 0 out of 5 stars0 ratings
Reviews for UNIX. Профессиональное программирование. 3-е изд.
0 ratings0 reviews
Book preview
UNIX. Профессиональное программирование. 3-е изд. - Уильям Стивенс
Отзывы о первом издании
Книга Advanced Programming in the UNIX® Environment обязательно должна быть у любого серьезного программиста, который пишет для UNIX на языке C. По своей основательности, глубине и ясности подачи материала она не имеет равных.
UniForum Monthly
Многочисленные читатели рекомендовали мне книгу Advanced Programming in the UNIX® Environment Ричарда Стивенса (издательство Addison-Wesley), и я благодарен им за это. Раньше я даже не слышал об этой книге, хотя она вышла еще в 1992 году. Получив экземпляр книги, я с первых же глав был очарован ею.
Open Systems Today
В книге Advanced Programming in the UNIX® Environment (Addison-Wesley), написанной Ричардом Стивенсом, вы найдете очень понятное и подробное описание внутреннего устройства UNIX. Она включает множество практических примеров, и я нахожу ее очень полезной при разработке системного программного обеспечения.
RS/Magazine
Моим родителям, Ленарду и Грейс
Вступительное слово ко второму изданию
В каждом интервью или в дискуссии после лекции мне задают один и тот же вопрос: «Ожидали ли вы, что UNIX продержится так долго?». Разумеется, в ответ я говорю одно и то же: «Нет, для нас это оказалось полной неожиданностью». Кто-то даже высчитал, что система в том или ином виде существует уже более половины всей жизни компьютерной индустрии.
Процесс развития индустрии был бурным и сложным. По сравнению с началом 70-х годов компьютерные технологии сильно изменились, особенно в области поддержки сетей, вездесущей графики и широкого распространения персональных компьютеров, но система сумела учесть и вобрать в себя все эти явления. Несмотря на то что сегодня в области настольных систем доминируют Microsoft и Intel, рынок определенно движется в направлении от единого поставщика к нескольким, а в последние годы все более ориентируется на открытые стандарты и свободно распространяемые продукты.
К счастью, система UNIX, если рассматривать ее как явление, а не только как торговую марку, не просто двигалась вперед, но сумела возглавить эти тенденции. В 70-х и 80-х годах XX века держателем авторских прав на исходные тексты UNIX была корпорация AT&T, но она всячески поощряла усилия по стандартизации системных интерфейсов и языков. Например, AT&T опубликовала описание интерфейса System V (System V Interface Definition, SVID), которое легло в основу стандарта POSIX. Так получилось, что UNIX легко смогла приспособиться к работе в сетевом окружении и, может быть, не так легко, но довольно эффективно — к работе с графикой. Кроме того, основные интерфейсы ядра UNIX и инструментальные средства уровня пользователя послужили технологической основой для появления движения за программное обеспечение с открытым исходным кодом.
Важно отметить, что статьи и книги, посвященные системе UNIX, всегда были востребованы, даже когда реализация самой системы была закрыта. Примером может служить книга Мориса Баха (Maurice Bach) «The Design of the Unix Operating System». Честно говоря, я мог бы утверждать, что такая долговечность системы во многом обусловлена ее привлекательностью для талантливых авторов, которые стремились объяснить ее красоты и тайны. Брайан Керниган (Brian Kernighan) — один из них, а другой, конечно же, Рич Стивенс (Rich Stevens). Первое издание этой книги, а также серия его книг, посвященных сетевым технологиям, справедливо считаются одними из лучших и потому пользуются заслуженной популярностью.
Первое издание этой книги вышло в свет еще до того, как получили широкое распространение Linux и другие реализации UNIX с открытым исходным кодом, берущие начало из Беркли, а также когда большинство людей имели лишь модемное подключение к сети. Стив Раго (Steve Rago) переработал эту книгу, чтобы учесть изменения, происшедшие в компьютерных технологиях и в стандартах ISO и IEEE с момента выхода первой публикации. Поэтому все примеры в книге обновлены и вновь протестированы.
Это самое достойное второе издание классики.
Мюррей Хилл, Нью-Джерси
Деннис Ритчи
Март 2005
Предисловие
Введение
Прошло почти восемь лет, как я приступил к обновлению первого издания, и за эти годы многое изменилось.
• К моменту публикации второго издания организация The Open Group выпустила новую редакцию спецификации Single UNIX Specification от 2004 года, включив в нее два блока изменений. В 2008-м The Open Group выпустила очередную версию спецификации Single UNIX Specification, дополнив основные определения, добавив новые и удалив устаревшие интерфейсы. В нее была включена версия 7 спецификации Base Specification, и в 2009-м она была опубликована как версия POSIX.1 2008 года. В 2010-м была опубликована версия 4 спецификации Single UNIX Specification, куда вошло обновленное определение интерфейса библиотеки curses.
• Организация The Open Group сертифицировала как UNIX-системы версии 10.5, 10.6 и 10.8 операционной системы Mac OS X, выполняющиеся на аппаратной архитектуре Intel.
• Компания Apple Computer прекратила разработку Mac OS X для платформы PowerPC. Начиная с версии 10.6 (Snow Leopard), новые версии операционной системы выпускались только для платформы x86.
• Были открыты исходные коды операционной системы Solaris, чтобы повысить ее конкурентоспособность с популярной открытой моделью разработки, которой следуют FreeBSD, Linux и Mac OS X. Когда в 2010-м Oracle Corporation купила Sun Microsystems, она прекратила разработку OpenSolaris. Вследствие этого сообществом Solaris был образован открытый проект Illumos на основе OpenSolaris, в рамках которого было продолжено развитие системы. За дополнительной информацией обращайтесь по адресу http://www.illumos.org.
• В 2011-м был обновлен стандарт языка C, но так как еще не все системы переориентировались на него, мы продолжим ссылаться на стандарт 1999 года.
Особо следует отметить, что платформы, использовавшиеся в качестве примеров во втором издании, значительно устарели. В этом, третьем, издании я буду опираться на следующие платформы:
1. FreeBSD 8.0, наследница 4.4BSD, от Computer Systems Research Group из Калифорнийского университета в Беркли, работающая на 32-разрядном процессоре Intel Pentium.
2. Linux 3.2.0 (дистрибутив Ubuntu 12.04), свободно распространяемая UNIX-подобная операционная система, работающая на 64-разрядном процессоре Intel Core i5.
3. Apple Mac OS X, версия 10.6.8 (Darwin 10.8.0), работающая на 64-разрядном процессоре Intel Core 2 Duo. (Ядро Darwin основано на ядрах FreeBSD и Mach.) Я выбрал версию для платформы Intel, потому что последние версии Mac OS X больше не поддерживают платформу PowerPC. Недостаток этого выбора в том, что появился перекос в сторону Intel. А при обсуждении проблем разнородности весьма полезно иметь процессоры с различными характеристиками, такими как порядок следования байтов и размер целого числа.
4. Solaris 10 (производная от System V Release 4), выпущенная компанией Sun Microsystems (ныне Oracle) и работающая на 64-разрядном процессоре UltraSPARC IIi.
Изменения в третьем издании
Одним из значительных изменений в версии POSIX.1-2008 спецификации Single UNIX Specification является объявление устаревшими интерфейсов, имеющих отношение к STREAMS. Это первый шаг на пути удаления интерфейсов из будущих версий стандарта. По этой причине я скрепя сердце удалил из этого издания книги все, что относилось к STREAMS. Я не считаю это изменение удачным, потому что интерфейсы STREAMS выглядят более привлекательными на фоне сокетов и во многих отношениях являются более гибкими. Должен признать, что я не могу быть полностью беспристрастным, когда дело доходит до механизма STREAMS, но у меня нет причин оспаривать понижение его значимости в современных системах:
• Linux не включает поддержку STREAMS в базовую систему, хотя существуют пакеты (LiS и OpenSS7), добавляющие эту функциональность;
• Solaris 10 включает поддержку STREAMS, но уже Solaris 11 использует реализацию сокетов, не опирающуюся на интерфейсы STREAMS;
• Mac OS X не включает поддержку STREAMS;
• FreeBSD не включает поддержку STREAMS (и никогда не включала).
После удаления разделов, связанных с механизмом STREAMS, появилась возможность добавить обсуждение новых тем, таких как POSIX-совместимый асинхронный ввод/вывод.
Второе издание книги охватывало ядро Linux версии 2.4. В этом издании я использую версию 3.2. Самое большое отличие между ними заключается в подсистеме управления потоками выполнения. В версии Linux 2.6 поддержка потоков выполнения была реализована на основе библиотеки Native POSIX Thread Library (NPTL), которая делает потоки выполнения в Linux более похожими на потоки в других системах.
Если говорить в общем, в это издание было включено более 70 новых интерфейсов, в том числе интерфейсов асинхронного ввода/вывода, циклические блокировки (spin locks), барьеры (barriers) и семафоры POSIX. Описание наиболее устаревших интерфейсов было удалено, кроме некоторых, распространенных повсеместно.
Благодарности
Я получил от читателей множество комментариев и замечаний после выхода второго издания и хочу поблагодарить их за то, что помогли повысить точность представленной информации. Далее перечислены те, кто оказались первыми: Сет Арнольд (Seth Arnold), Люк Баккен (Luke Bakken), Рик Баллард (Rick Ballard), Йоханнес Биттнер (Johannes Bittner), Дэвид Брондер (David Bronder), Влад Буслов (Vlad Buslov), Питер Батлер (Peter Butler), Ю-Чинг Чен (Yuching Chen), Майк Ченг (Mike Cheng), Джим Коллинз (Jim Collins), Боб Кузинс (Bob Cousins), Уилл Деннис (Will Dennis), Томас Дики (Thomas Dickey), Лойк Домайне (Loic Domaigne), Игорь Фуксман (Igor Fuksman), Алекс Гезерлис (Alex Gezerlis), М. Скотт Гордон (M. Scott Gordon), Тимоти Гойя (Timothy Goya), Тони Грэхем (Tony Graham), Майкл Хобгуд (Michael Hobgood), Майкл Керриск (Michael Kerrisk), Юнг-Ху Квон (Youngho Kwon), Ричард Ли (Richard Li), Сюйек Лиу (Xueke Liu), Юн Лонг (Yun Long), Дэн Мак-Грегор (Dan McGregor), Дилан Мак-Нами (Dylan McNamee), Грег Миллер (Greg Miller), Симон Морган (Simon Morgan), Гарри Ньютон (Harry Newton), Джим Олдфилд (Jim Oldfield), Скотт Пэриш (Scott Parish), Звездан Петкович (Zvezdan Petkovic), Дэвид Рейсс (David Reiss), Константинос Сакутис (Konstantinos Sakoutis), Дэвид Смут (David Smoot), Дэвид Сомерс (David Somers), Андрей Ткачук (Andriy Tkachuk), Натан Уикс (Nathan Weeks), Флориан Веймер (Florian Weimer), Ку-Инг-Янг Сюй (Qingyang Xu) и Майкл Залокар (Michael Zalokar).
Технические рецензенты помогли повысить точность представленной в книге информации. Большое спасибо Стиву Альберту (Steve Albert), Богдану Барбу (Bogdan Barbu) и Роберту Дэю (Robert Day). Особую б