Программирование. Введение в профессию. Том 2: Системыи сети

Программирование. Введение в профессию. Том 2: Системыи сети

Программирование. Введение в профессию. Том 2: Системыи сети
Автор: Столяров Андрей Викторович
Дата выхода: 2000
Издательство: Самиздат
Количество страниц: 226
Размер файла: 5,0 МБ
Тип файла: PDF
Добавил: Aleks-5
 Проверить на вирусы

4. Программирование на языке Си....7

4.1. Феномен языка Си (вместо предисловия)....7

4.2. Первые впечатления....9

4.2.1. Программа <> ....9

4.2.2. О завершении программы ....11

4.2.3. Квадратное уравнение ....11

4.2.4. Как узнать имя нужного заголовочного файла ....14

4.3. Базовые средства языка Си....14

4.3.1. Объявления и описания функций ....15

4.3.2. Переменные и их описание ....15

4.3.3. Встроенные типы ....16

4.3.4. Литералы (константы) разных типов ....17

4.3.5. Операции и выражения ....18

4.3.6. Операторы языка Си ....21

4.3.7. Перечислимый тип ....25

4.3.8. Введение констант с помощью перечислимого типа ....26

4.3.9. Перечислимый тип и оператор выбора ....26

4.3.10. Локальные <<статические>> переменные ....27

4.3.11. Адреса, указатели и операции над ними ....28

4.3.12. Организация <<выходных>> параметров функций ....29

4.3.13. Массивы ....29

4.3.14. Динамическая память ....30

4.3.15. Модификатор const ....30

4.3.16. Понятие леводопустимого выражения (lvalue) ....31

4.3.17. Инициализаторы для массивов ....32

4.3.18. Строки ....32

4.3.19. Строковые литералы ....34

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

4.3.21. () Точки следования (sequence points) ....35

4.3.22. Избранные примеры программ ....36

4.4. Стандартные функции ввода-вывода....37

4.4.1. Посимвольный ввод-вывод ....37

4.4.2. Форматированный ввод-вывод ....38

4.4.3. Работа с текстовыми потоками ....40

4.4.4. Ввод-вывод отдельных строк ....43

4.4.5. О буферизации ввода-вывода ....44

4.4.6. <<Вывод>> в строку и <<ввод>> из строки ....45

4.4.7. Блочный ввод-вывод ....46

4.5. Составной тип данных и динамические структуры....47

4.5.1. Структуры ....47

4.5.2. Односвязные списки ....49

4.5.3. Двусвязные списки ....51

4.5.4. Простое бинарное дерево поиска ....52

4.5.5. Объединения и вариантные структуры ....54

4.5.6. Директива typedef ....55

4.6. Макропроцессор....55

4.6.1. Предварительные сведения ....55

4.6.2. Макроопределения и макровызовы ....56

4.6.3. Соглашения об именовании ....56

4.6.4. Более сложные возможности макросов ....57

4.6.5. () Макросы и конструкция do { } while(0) ....58

4.6.6. Директивы условной компиляции ....59

4.6.7. Ещё несколько полезных директив ....60

4.6.8. Директива include ....60

4.6.9. Особенности оформления макродиректив ....61

4.7. Раздельная трансляция....61

4.7.1. Общая схема раздельной трансляции в Си ....61

4.7.2. Видимость объектов из других модулей ....62

4.7.3. Заголовочные файлы к модулям ....63

4.7.4. Защита от повторного включения ....63

4.7.5. Объявления типов; неполные типы ....64

4.8. Язык Си и стиль кода....65

4.8.1. Вспоминаем общие принципы ....65

4.8.2. Фирменные особенности Си ....66

4.8.3. Побочные эффекты ....68

4.8.4. Возвращаемые значения и выходные параметры ....69

4.8.5. () Программы, говорящие по-русски ....71

4.9. <<Заковыристые>> типы указателей....73

4.9.1. Многомерные массивы и указатели на массивы ....74

4.9.2. Указатели на функции ....74

4.9.3. Функции обратного вызова (callback) ....76

4.9.4. Сложные описания и общие правила их прочтения ....77

4.10. Ещё о возможностях стандартной библиотеки....78

4.10.1. Дополнительные функции работы с кучей ....78

4.10.2. Функции обработки строк ....79

4.10.3. Генерация псевдослучайных чисел ....80

4.10.4. () Средства создания вариадических функций ....81

4.11. () Полноэкранные программы на Си....81

4.11.1. Простой пример ....82

4.11.2. Обработка клавиатурных и других событий ....82

4.11.3. Управление цветом и атрибутами символов ....84

4.11.4. Клавиатурный ввод с тайм-аутами ....86

4.11.5. Обзор остальных возможностей ncurses ....87

4.12. () Программа на Си без стандартной библиотеки....87

5. Объекты и услуги операционной системы....90

5.1. Операционная система: что это и зачем....90

5.1.1. Роль и место операционной системы ....90

5.1.2. Управление пользовательскими задачами ....91

5.1.3. Управление внешними устройствами ....91

5.1.4. Границы зоны ответственности ОС ....92

5.1.5. Unix: семейство систем и образ мышления ....93

5.1.6. Замечания о системе X Window ....95

5.1.7. Системные вызовы и их обёртки ....96

5.1.8. О разграничении полномочий ....97

5.2. Ввод-вывод и файловые системы....99

5.2.1. Знакомьтесь: файловая система ....99

5.2.2. Права доступа к файлам ....101

5.2.3. Чтение и запись содержимого файлов ....102

5.2.4. Управление объектами файловой системы ....105

5.2.5. Файлы устройств и классификация устройств ....107

5.2.6. Работа с содержимым каталогов ....108

5.2.7. Отображение файлов в память ....108

5.3. Процессы....109

5.3.1. Процесс: что это такое ....109

5.3.2. Свойства процесса ....110

5.3.3. Виртуальное адресное пространство ....111

5.3.4. Порождение процесса ....113

5.3.5. Замена выполняемой программы ....114

5.3.6. Завершение процесса ....116

5.3.7. Ожидание завершения; процессы-зомби ....117

5.3.8. Пример запуска внешней программы ....118

5.3.9. Выполнение процессов и время ....118

5.3.10. Перенаправление потоков ввода-вывода ....120

5.3.11. Полномочия процесса ....121

5.3.12. Количественные ограничения ....122

5.3.13. Обзор средств взаимодействия процессов ....123

5.3.14. Сигналы ....124

5.3.15. Каналы ....129

5.3.16. Краткие сведения о трассировке ....131

5.4. Терминал и сеанс работы....131

5.4.1. Драйвер терминала и дисциплина линии ....131

5.4.2. Сеансы и группы процессов ....133

5.4.3. Управление драйвером терминала ....135

5.4.4. По ту сторону псевдотерминала ....137

5.4.5. Процессы-демоны ....138

6. Сети и протоколы....139

6.1. Компьютерные сети как явление....139

6.1.1. Сети и сетевые соединения ....139

6.1.2. Шлюзы и маршрутизация ....142

6.2. Сетевые протоколы....144

6.2.1. Понятие протокола и модель OSI ....144

6.2.2. Физические и канальные протоколы ....144

6.2.3. Протокол IP ....145

6.2.4. Дейтаграммы и потоки ....150

6.2.5. Протоколы прикладного слоя ....150

6.2.6. Доменные имена ....153

6.3. Система сокетов в ОС Unix....154

6.3.1. Семейства адресации и типы взаимодействия ....154

6.3.2. Сокет и его сетевой адрес ....155

6.3.3. Приём и передача дейтаграмм ....157

6.3.4. Потоковые сокеты. Клиент-серверная модель ....157

6.3.5. О <<залипании>> TCP-порта ....159

6.3.6. Сокеты для связи родственных процессов ....159

6.4. Проблема очерёдности действий и её решения....160

6.4.1. Суть проблемы ....160

6.4.2. Решение на основе обслуживающих процессов ....160

6.4.3. Событийно-управляемое программирование ....161

6.4.4. Выборка событий в ОС Unix: вызов select ....162

6.4.5. Сеанс работы как конечный автомат ....164

6.4.6. Неблокирующее установление соединения ....167

6.4.7. () Сигналы в роли событий; вызов pselect ....167

7. Параллельные программы и разделяемые данные....169

7.1. О работе с разделяемыми данными....171

7.1.1. Устаревание и целостность данных ....171

7.1.2. Взаимоисключения. Критические секции ....172

7.1.3. Взаимоисключение с помощью переменных ....173

7.1.4. Понятие мьютекса ....174

7.1.5. О реализации мьютексов ....174

7.1.6. Семафоры Дейкстры ....175

7.2. Классические задачи взаимоисключения....176

7.2.1. Задача производителей и потребителей ....176

7.2.2. Задача о пяти философах и проблема тупиков ....177

7.2.3. Граф ожидания ....180

7.2.4. Проблема читателей и писателей ....181

7.2.5. Задача о спящем парикмахере ....182

7.3. Многопоточное программирование в ОС Unix....184

7.3.1. Библиотека Posix Threads ....184

7.3.2. Семафоры и мьютексы ....185

7.3.3. Демонстрационный пример ....186

Заключение....188

7.4. Разделяемые данные на диске....188

7.4.1. Обзор имеющихся возможностей ....188

7.4.2. Создание дополнительного файла ....189

7.4.3. Системный вызов flock ....190

7.4.4. Файловые захваты POSIX ....191

7.4.5. Некоторые проблемы файловых захватов ....192

8. Ядро системы: взгляд за кулисы....193

8.1. Основные принципы работы ОС....193

8.1.1. Ядро как обработчик запросов ....193

8.1.2. Загрузка и жизненный цикл ОС UNIX ....195

8.1.3. Эмуляция физического компьютера ....196

8.1.4. Структура и основные подсистемы ядра ....198

8.2. Управление процессами....198

8.2.1. Процесс как объект ядра системы ....198

8.2.2. Планирование времени процессора ....200

8.2.3. Обработка сигналов ....202

8.3. Управление оперативной памятью....203

8.3.1. Проблемы, решаемые менеджером памяти ....203

8.3.2. Виртуальная память и подкачка ....204

8.3.3. Простейшая модель виртуальной памяти ....204

8.3.4. Сегментная организация памяти ....204

8.3.5. Страничная организация памяти ....205

8.3.6. Сегментно-страничная организация памяти ....207

8.4. Управление аппаратурой; ввод-вывод....207

8.4.1. Две точки зрения на ввод-вывод ....207

8.4.2. Взаимодействие ОС с аппаратурой ....207

8.4.3. Драйверы ....208

8.4.4. Ввод-вывод на разных уровнях ВС ....210

8.4.5. О роли аппаратных прерываний ....211

8.4.6. Буферизация ввода-вывода ....211

8.4.7. Планирование дисковых обменов ....213

8.4.8. Виртуальная файловая система ....214

8.4.9. Файловая система на диске ....215

8.4.10. Шина, кеш и DMA ....216

Приложения....218

Приложение 1. Компилятор gcc....218

Приложение 2. Средства отладки....218

Отладчик gdb....218

Утилита strace....220

Программа valgrind....220

Приложение 3. Автоматическая сборка: утилита make....221

Простейший Makefile....222

Переменные и псевдопеременные....222

Обобщённые цели....222

Псевдоцели....223

Автоматическое отслеживание зависимостей....223

Приложение 4. Редактор vim: больше возможностей....223

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

Учебник «Программирование: введение в профессию» ориентирован на самостоятельное изучение и предполагает использование систем семейства Unix (в т.ч. Linux) в роли сквозной среды для обучения.


Похожее:

Список отзывов:

Нет отзывов к книге.