Библиотека — TLPI — База знаний [X]
Шифр
tlpi-start
Разделы
linux
Сверено
22 августа — в этот день утверждения статьи сверялись с первоисточниками, а не правился текст
Объём
7 505 знаков · 22 раздела · чтения около 10 минут

TLPI — База знаний


Заметки по книге "The Linux Programming Interface" (Michael Kerrisk). Система: CachyOS (Arch-based). Редактор: VS Code + clangd.


Среда разработки

Установленные пакеты

sudo pacman -S base-devel linux-headers man-pages gdb strace ltrace valgrind clang

Назначение:

  • base-devel — gcc, make, binutils и прочее для сборки
  • linux-headers — заголовки ядра
  • man-pages — справочные страницы (Керриск — мейнтейнер проекта, книга постоянно ссылается на man)
  • gdb — отладчик
  • strace, ltrace — трассировка системных вызовов и библиотечных функций
  • valgrind — обнаружение ошибок работы с памятью
  • clang — включает clangd (языковой сервер для C/C++)

Пакеты, которые понадобятся позже (по мере продвижения по книге):

  • libcap — capabilities
  • libseccomp — seccomp-фильтры
  • acl — расширенные ACL

VS Code

Расширение: clangd (от LLVM), не Microsoft C/C++. clangd использует фронтенд Clang для анализа — точнее работает с системными заголовками и макросами POSIX API.

Файл compile_flags.txt в корне рабочей директории:

-Wall
-Wextra
-pedantic
-std=c11

Для проектов с Makefile — утилита bear генерирует compile_commands.json:

bear -- make

Исходники к книге

Скачать с https://man7.org/tlpi/code/ — архив содержит общие заголовки в lib/ (tlpi_hdr.h, error_functions.h и обёртки вроде errExit). Без них примеры из книги не скомпилируются.


Оглавление и прогресс

Отмечай [x] по мере прохождения.

Часть I — Основы и концепции

  • 1. History and Standards
  • 2. Fundamental Concepts
  • 3. System Programming Concepts

Часть II — Файловый ввод-вывод

  • 4. File I/O: The Universal I/O Model
  • 5. File I/O: Further Details
  • 6. Processes

Часть III — Память и процессы

  • 7. Memory Allocation
  • 8. Users and Groups
  • 9. Process Credentials
  • 10. Time
  • 11. System Limits and Options
  • 12. Retrieving System and Process Information

Часть IV — Файловые системы

  • 13. File I/O Buffering
  • 14. File Systems
  • 15. File Attributes
  • 16. Extended Attributes
  • 17. Access Control Lists
  • 18. Directories and Links
  • 19. Monitoring File Events

Часть V — Сигналы

  • 20. Signals: Fundamental Concepts
  • 21. Signals: Signal Handlers
  • 22. Signals: Advanced Features

Часть VI — Таймеры и сон

  • 23. Timers and Sleeping

Часть VII — Процессы: создание и завершение

  • 24. Process Creation
  • 25. Process Termination
  • 26. Monitoring Child Processes
  • 27. Program Execution
  • 28. Process Creation and Program Execution in More Detail

Часть VIII — Потоки

  • 29. Threads: Introduction
  • 30. Threads: Thread Synchronization
  • 31. Threads: Thread Safety and Per-Thread Storage
  • 32. Threads: Thread Cancellation
  • 33. Threads: Further Details

Часть IX — IPC: обзор и каналы

  • 34. Process Groups, Sessions, and Job Control
  • 35. Process Priorities and Scheduling
  • 36. Process Resources
  • 37. Daemons
  • 38. Writing Secure Privileged Programs
  • 39. Capabilities
  • 40. Login Accounting
  • 41. Fundamentals of Shared Libraries
  • 42. Advanced Features of Shared Libraries

Часть X — IPC: System V и POSIX

  • 43. Interprocess Communication Overview
  • 44. Pipes and FIFOs
  • 45. Introduction to System V IPC
  • 46. System V Message Queues
  • 47. System V Semaphores
  • 48. System V Shared Memory
  • 49. Memory Mappings
  • 50. Virtual Memory Operations
  • 51. Introduction to POSIX IPC
  • 52. POSIX Message Queues
  • 53. POSIX Semaphores
  • 54. POSIX Shared Memory
  • 55. File Locking

Часть XI — Сокеты

  • 56. Sockets: Introduction
  • 57. Sockets: UNIX Domain
  • 58. Sockets: Fundamentals of TCP/IP
  • 59. Sockets: Internet Domain
  • 60. Sockets: Server Design
  • 61. Sockets: Advanced Topics

Часть XII — Продвинутый ввод-вывод

  • 62. Terminals
  • 63. Alternative I/O Models
  • 64. Pseudoterminals

Заметки из обсуждений

Настройка среды (старт)

clangd vs Microsoft C/C++ Extension: clangd построен на парсере Clang, поэтому его анализ практически идентичен реальной компиляции. Microsoft-расширение использует собственный IntelliSense, который хуже справляется с системными заголовками Linux и макросами POSIX. Для кода из TLPI разница заметна.

clangd в CachyOS: отдельного пакета clangd нет — он входит в clang (sudo pacman -S clang). Нужны два компонента: бинарник в системе + расширение clangd в VS Code.

Компилятор vs языковой сервер: clangd не заменяет gcc для сборки. Компилируешь по-прежнему через gcc/make, clangd только анализирует код в редакторе.

Сборка примеров и библиотека lib/

Примеры из книги зависят от вспомогательной библиотеки Керриска в lib/ — там живут функции обработки ошибок (errExit, errMsg, fatal) и общий заголовок tlpi_hdr.h. Это не обёртка над Linux API — системные вызовы вызываются напрямую. Библиотека только убирает шаблонный код проверки ошибок.

Компиляция отдельного примера с библиотекой: gcc -Wall -Wextra -std=c11 -I../lib prog.c ../lib/libtlpi.a -o prog. Либо make prog в директории примера — Makefile подставит нужные флаги и зависимости.

Некоторые главы требуют дополнительных флагов линковки: -lpthread (потоки, главы 29–33), -lrt (POSIX таймеры/очереди), -lcap (capabilities). Книга всегда это указывает.

Стратегия: на первых главах — не использовать lib/, писать обработку ошибок вручную через perror/strerror/exit. Это даёт понимание механики errno и того, как системные вызовы сигнализируют об ошибках (ключевая тема главы 3). Когда паттерн станет автоматическим — переключиться на обёртки Керриска, чтобы не тратить время на шаблонный код.


Шаблон заметок по главе

При прохождении новой главы — копируй блок ниже и заполняй.

### Глава N — Название

**Ключевые системные вызовы:** ...
**Основная идея:** ...
**Нюансы и подводные камни:**
- ...
**Связь с другими главами:** ...
**Полезные команды для экспериментов:**
- ...
**Открытые вопросы:** ...

Связанные заметки

Из библиотеки института уносят только знания. Читателей здесь не считают: посещение не регистрируется, отметок в издании не остаётся, счётчиков нет ни у одного издания фонда.

Издание пополняется и пересверяется. Текст доступен на условиях CC BY-SA 4.0 — унесённое можно передавать дальше на тех же условиях.