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