Please enable JavaScript.
Coggle requires JavaScript to display documents.
LPI: основы системного программирования (Стандарты и портируемость (типы…
LPI: основы системного программирования
Системные вызовы и билиотечные функции
Сисколы
Ощутимо затратнее функцию юзерспейса
Порядок отработки
кладутся аргументы и номер сискола в регистры
вызывается прерывание ядра
Хэндлер сисколов проверяет корректность аргументов
нет ошибки - кладет их в стек ядра
вызывает хэндлер сискола
возвращает значение
1 more item...
таблица хэндлеров sys_call_table
1 more item...
ошибка - кладет код в регистр
Ошибки - отрицательные значения
Перед тем, как вернуть ошибку в стек, обращает в положительное
Неотрицательные значения - успех
Обработка ошибок
Возвращает -1
Код ошивки в errno
errno предварительно не зануляется
помнить при проверке
ошибку в текст
perror()
strerror()
перечислены в man syscalls.2
заоболочены в libc
Функции
Обработка ошибок
Может дублировать логку сискола
Может иметь другое возвращаемое значение, например NULL, но использовать errno
Может не использовать errno
читать man
указаны возможные ошибки
стандартная библиотека libc
при запуске как исполняемый файл дает полное инфо о себе
Код функций в книге
Заголовок с объявлениями
Макрос NORETURN
Под ним аттрибут gcc
Сообщает компилятору, что функция завершает программу
Функции работы с ошибками
С errno
errMsg(...)
не выходит
errExit(...)
вызывает exit()
err_exit(...)
вызывает _exit()
использовать в потоках
не флашит stdout
errExitEN
как errExit, но код ошибки передается аргументом, не через errno
удобно для проверки кода ошибки pthread_create
Без errno
fatal(...)
терминирует с сообщением
usageErr(...)
cmdLineErr(...)
Функции для корректной конвертации строк в числа
getInt(...)
getLong()
getNum()
Использует флаги
для тюнинга осуществляемых проверок
для парсинга по основанию
Стандарты и портируемость
Макросы обеспечивающие POSIX-совместимость
По-умолчанию в gcc: POSIX-2008
Макросы обеспечивающие SUS-совместимость
_BSD_SOURCE
_POSIX_C_SOURCE
_SVID_SOURCE
System V definition
типы данных
некоторые характеристики типов данных определены в SUS
Структуры могут быть определены с точностью до порядка элементов
могут отличаться:
порядок
общее количество полей
Инициализировать поля явно