В корзину
Купить в 1 клик
Бесплатная доставка Новой Почтой
Отправка на следующий рабочий день
Отправка на следующий рабочий день
Описание
2012г.
Количество страниц: 400
Рассмотрены в книге Самоучитель. Программирование в Linux 2-е изд. Иванов фундаментальные основы программирования в Linux: инструментарий, низкоуровневый ввод-вывод, многозадачность, файловая система, межпроцессное взаимодействие и обработка ошибок. Книга главным образом ориентирована на практическое применение изложенных концепций. В ней есть все, что нужно начинающим, а углубленное изучение каждой темы делает ее ценной и для опытных программистов. Каждая тема проиллюстрирована большим числом примеров на языках С и С++ и Python, которые читатель сможет использовать в качестве образцов для собственных программ. На FTP-сервере издательства находятся исходные тексты программ.
Во втором издании материал актуализирован с учетом современных тенденций, добавлены 3 новые главы по программированию в Linux на языке Python, устранены замеченные ошибки.
Оглавление книги
Введение 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 Предметный указатель
Оглавление книги
Самоучитель. Программирование в 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 Предметный указатель
