Во втором издании материал актуализирован с учетом современных тенденций, добавлены 3 новые главы по программированию в Linux на языке Python, устранены замеченные ошибки.
Оглавление книги
Самоучитель. Программирование в Linux 2-е изд. Иванов
Введение 9
Предисловие 9
Условные обозначения 9
Примеры программ 10
Благодарности 10
Обратная связь 10
Часть I. Основы программирования в Linux
13
Глава 1. Создание программы
15
1.1. Исходный код 15
1.2. Компиляция 17
1.3. Компоновка 18
1.4. Многофайловые проекты 19
Глава 2. Автосборка
23
2.1. Обзор средств автосборки в Linux 23
2.2. Утилита make 25
2.3. Базовый синтаксис Makefile 25
2.4. Константы make 28
2.5. Рекурсивный вызов make 31
2.6. Получение дополнительной информации 36
Глава 3. Окружение
37
3.1. Понятие окружения 37
3.2. Чтение окружения: environ, getenv() 39
3.3. Модификация окружения: setenv(), putenv(), unsetenv() 41
3.4. Очистка окружения 45
Глава 4. Библиотеки
46
4.1. Библиотеки и заголовочные файлы 46
4.2. Подключение библиотек 47
4.3. Создание статических библиотек 48
4.4. Создание совместно используемых библиотек 52
4.5. Взаимодействие библиотек 55
Глава 5. Аргументы и опции программы
58
5.1. Аргументы программы 58
5.2. Использование опций 60
5.3. Использование длинных опций 63
5.4. Получение дополнительной информации 65
Часть II. Низкоуровневый ввод-вывод в Linux
67
Глава 6. Концепция ввода-вывода в Linux
69
6.1. Библиотечные механизмы ввода-вывода языка C 69
6.2. Концепция низкоуровневого ввода-вывода 73
6.3. Консольный ввод-вывод 74
6.4. Ввод-вывод в C++ 75
Глава 7. Базовые операции ввода-вывода
78
7.1. Создание файла: creat() 78
7.2. Открытие файла: open() 82
7.3. Закрытие файла: close() 86
7.4. Чтение файла: read() 88
7.5. Запись файла: write() 91
7.6. Произвольный доступ: lseek() 94
Глава 8. Расширенные возможности ввода-вывода в Linux
104
8.1. Взаимодействие с библиотечными механизмами 104
8.2. Векторное чтение: readv() 108
8.3. Векторная запись: writev() 111
8.4. Концепция "черных дыр" 114
Часть III. Многозадачность
119
Глава 9. Основы многозадачности в Linux
121
9.1. Библиотечный подход: system() 121
9.2. Процессы в Linux 123
9.3. Дерево процессов 126
9.4. Получение информации о процессе 127
Глава 10. Базовая многозадачность
131
10.1. Концепция развилки: fork() 131
10.2. Передача управления: execve() 134
10.3. Семейство exec() 140
10.4. Ожидание процесса: wait() 147
Глава 11. Потоки
153
11.1. Концепция потоков в Linux 153
11.2. Создание потока: pthread_create() 155
11.3. Завершение потока: pthread_exit() 160
11.4. Ожидание потока: pthread_join() 161
11.5. Получение информации о потоке: pthread_self(), pthread_equal() 165
11.6. Отмена потока: pthread_cancel() 167
11.7. Получение дополнительной информации 169
Глава 12. Расширенная многозадачность
171
12.1. Уступчивость процесса: nice() 171
12.2. Семейство wait() 174
12.3. Зомби 178
Часть IV. Файловая система
181
Глава 13. Обзор файловой системы в Linux
183
13.1. Аксиоматика файловой системы в Linux 183
13.2. Типы файлов 184
13.3. Права доступа 186
13.4. Служебные файловые системы 188
13.5. Устройства 189
13.6. Монтирование файловых систем 191
Глава 14. Чтение информации о файловой системе
192
14.1. Семейство statvfs() 192
14.2. Текущий каталог: getcwd() 196
14.3. Получение дополнительной информации 199
Глава 15. Чтение каталогов
200
15.1. Смена текущего каталога: chdir() 200
15.2. Открытие и закрытие каталога: opendir(), closedir() 203
15.3. Чтение каталога: readdir() 204
15.4. Повторное чтение каталога: rewinddir() 205
15.5. Получение данных о файлах: семейство stat() 206
15.6. Чтение ссылок: readlink() 213
Глава 16. Операции над файлами
217
16.1. Удаление файла: unlink() 217
16.2. Перемещение файла: rename() 224
16.3. Создание ссылок: link() 226
16.4. Создание каталога: mkdir() 228
16.5. Удаление каталога: rmdir() 232
Глава 17. Права доступа
234
17.1. Смена владельца: chown() 234
17.2. Смена прав доступа: семейство chmod() 234
Глава 18. Временные файлы
243
18.1. Концепция использования временных файлов 243
18.2. Создание временного файла: mkstemp() 244
18.3. Закрытие и удаление временного файла 244
Часть V. Межпроцессное взаимодействие
251
Глава 19. Обзор методов межпроцессного взаимодействия в Linux
253
19.1. Общие сведения о межпроцессном взаимодействии в Linux 253
19.2. Локальные методы межпроцессного взаимодействия 254
19.3. Удаленное межпроцессное взаимодействие 258
Глава 20. Сигналы
260
20.1. Понятие сигнала в Linux 260
20.2. Отправка сигнала: kill() 262
20.3. Обработка сигнала: sigaction() 264
20.4. Сигналы и многозадачность 265
20.5. Получение дополнительной информации 269
Глава 21. Использование общей памяти
270
21.1. Выделение памяти: shmget() 270
21.2. Активизация совместного доступа: shmat() 271
21.3. Отключение совместного доступа: shmdt() 271
21.4. Контроль использования памяти: shmctl() 272
21.5. Использование семафоров 275
21.6. Контроль за семафорами: semctl() 277
Глава 22. Использование общих файлов
281
22.1. Размещение файла в памяти: mmap() 281
22.2. Освобождение памяти: munmap() 282
22.3. Синхронизация: msync() 283
Глава 23. Каналы
287
23.1. Создание канала: pipe() 287
23.2. Перенаправление ввода-вывода: dup2() 290
23.3. Получение дополнительной информации 294
Глава 24. Именованные каналы FIFO
295
24.1. Создание именованного канала 295
24.2. Чтение, запись и закрытие FIFO 296
Глава 25. Сокеты
299
25.1. Типы сокетов 299
25.2. Создание и удаление сокетов 300
25.3. Назначение адреса: bind() 301
25.4. Соединение сокетов: connect() 304
25.5. Прослушивание сокета: listen() 306
25.6. Принятие запроса на подключение: accept() 306
25.7. Прием и передача данных через сокеты 310
25.8. Получение дополнительной информации 313
Часть VI. Работа над ошибками и отладка
315
Глава 26. Выявление и обработка ошибок
317
26.1. Типы ошибок 317
26.2. Сообщения об ошибках 320
26.3. Макрос assert() 321
Глава 27. Ошибки системных вызовов
325
27.1. Чтение ошибки: errno 325
27.2. Сообщение об ошибке: strerror(), perror() 327
Глава 28. Использование отладчика gdb
330
28.1. Добавление отладочной информации 330
28.2. Запуск отладчика 331
28.3. Трансляция программы под отладчиком 334
28.4. Точки останова 340
28.5. Получение дополнительной информации 344
Часть VII. Программирование в Linux на языке Python
345
Глава 29. Язык Python
347
29.1. Несколько слов о языке Python 347
29.2. Инструментарий 349
29.3. Первая программа 350
29.4. Структура программы 352
Глава 30. Типы данных
356
30.1. Переменные 357
30.2. Целые числа 358
30.3. Числа с плавающей точкой 360
30.4. Строки 362
30.5. Списки 366
Глава 31. Программирование на языке Python
369
31.1. Логические операции 369
31.2. Сообщения об ошибках 371
31.3. Ветвления 373
31.4. Циклы 375
31.5. Функции 378
Приложения 379
Приложение 1. Именованные константы 381
Приложение 2. Коды ошибок системных вызовов 383
Приложение 3. Сигналы Linux 386
Приложение 4. Примеры программ 388
Предметный указатель