Discover millions of ebooks, audiobooks, and so much more with a free trial

Only $11.99/month after trial. Cancel anytime.

UNIX. Профессиональное программирование. 3-е изд.
UNIX. Профессиональное программирование. 3-е изд.
UNIX. Профессиональное программирование. 3-е изд.
Ebook2,424 pages16 hours

UNIX. Профессиональное программирование. 3-е изд.

Rating: 0 out of 5 stars

()

Read preview

About this ebook

Эта книга заслуженно пользуется популярностью у серьезных программистов во всем мире, поскольку содержит самую важную и практическую информацию об управлении ядрами UNIX и Linux. Без этих знаний невозможно написать эффективный и надежный код.
От основ — файлы, каталоги и процессы — вы постепенно перейдете к более сложным вопросам, таким как обработка сигналов и терминальный ввод/вывод, многопоточная модель выполнения и межпроцессное взаимодействие с применением сокетов.
В общей сложности в этой книге охвачены более 70 интерфейсов, включая функции POSIX асинхронного ввода/вывода, циклические блокировки, барьеры и семафоры POSIX.
LanguageРусский
PublisherПитер
Release dateNov 13, 2023
ISBN9785446106493
UNIX. Профессиональное программирование. 3-е изд.
Read preview

Related to UNIX. Профессиональное программирование. 3-е изд.

Related ebooks

Software Development & Engineering For You

View More

Reviews for UNIX. Профессиональное программирование. 3-е изд.

Rating: 0 out of 5 stars
0 ratings

0 ratings0 reviews

What did you think?

Tap to rate

Review must be at least 10 words

    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 Micro­systems (ныне 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). Особую б