Каждый из этих типов определен с помощью имеющегося в языке C спецификатора typedef. Например, тип данных pid_t предназначен для представления идентификаторов процессов и в Linux/x86-32 определяется следующим образом:
typedef int pid_t;
У большинства стандартных типов системных данных имена оканчиваются на _t. Многие из них объявлены в заголовочном файле <sys/types.h>, хотя некоторые объявлены в других заголовочных файлах.
Приложение должно использовать эти определения типов, чтобы портируемым образом объявить используемые им переменные. Например, следующее объявление позволит приложению правильно представить идентификаторы процессов в любой совместимой с SUSv3 системе:
pid_t mypid;
В табл. 3.1 перечислены типы системных данных, которые будут встречаться в данной книге. Для отдельных типов в этой таблице SUSv3 требует, чтобы они были реализованы в качестве арифметических типов. Это означает, что при реализации в качестве базового типа может быть выбран либо целочисленный тип, либо тип с плавающей точкой (вещественный или комплексный).
Таблица 3.1. Отдельные типы системных данных
Тип данных — Требование к типу в SUSv3 — Описание
blkcnt_t — Целое число со знаком — Количество блоков файла (см. раздел 15.1)
blksize_t — Целое число со знаком — Размер блока файла (см. раздел 15.1)
cc_t — Целое число без знака — Специальный символ терминала (см. раздел 58.4)
clock_t — Целое число или вещественное число с плавающей точкой — Системное время в тиках часов (см. раздел 10.7)
clockid_t — Арифметический тип — Идентификатор часов для определенных в POSIX.1b функций часов и таймера (см. раздел 23.6)
comp_t — В SUSv3 отсутствует — Сжатые тики часов (см. раздел 28.1)
dev_t — Арифметический тип — Номер устройства, состоящий из старшего и младшего номеров (см. раздел 15.1)
DIR — Требования к типу отсутствуют — Поток каталога (см. раздел 18.8)
fd_set — Структурный тип — Дескриптор файла, установленный для select() (см. подраздел 58.2.1)
fsblkcnt_t — Целое число без знака — Количество блоков в файловой системе (см. раздел 14.11)
fsfilcnt_t — Целое число без знака — Количество файлов (см. раздел 14.11)
gid_t — Целое число — Числовой идентификатор группы (см. раздел 8.3)
id_t — Целое число — Базовый тип для хранения идентификаторов; достаточно большой, по крайней мере для pid_t, uid_t и gid_t
in_addr_t — 32-разрядное целое число без знака — IPv4 адрес (см. раздел 55.4)
in_port_t — 16-разрядное целое число без знака — Номер порта IP (см. раздел 55.4)
ino_t — Целое число без знака — Номер индексного дескриптора файла (см. раздел 15.1)
key_t — Арифметический тип — Ключ IPC в System V
mode_t — Целое число — Тип файла и полномочия доступа к нему (см. раздел 15.1)
mqd_t — Требования к типу отсутствуют, но не должен быть типом массива — Дескриптор очереди сообщений POSIX
msglen_t — Целое число без знака — Количество байтов, разрешенное в очереди сообщений в System V
msgqnum_t — Целое число без знака — Количество сообщений в очереди сообщений в System V
nfds_t — Целое число без знака — Количество дескрипторов файлов для poll() (см. подраздел 59.2.2)
nlink_t — Целое число — Количество жестких ссылок на файл (см. раздел 15.1)
off_t — Целое число со знаком — Смещение в файле или размер файла (см. разделы 4.7 и 15.1)
pid_t — Целое число со знаком — Идентификатор процесса, группы процессов или сессии (см. разделы 6.2, 34.2 и 34.3)
ptrdiff_t — Целое число со знаком — Разница между двумя значениями указателей в виде целого числа со знаком
rlim_t — Целое число без знака — Ограничение ресурса (см. раздел 36.2)
sa_family_t — Целое число без знака — Семейство адресов сокета (см. раздел 52.4)
shmatt_t — Целое число без знака — Количество прикрепленных процессов для совместно используемого сегмента памяти System V
sig_atomic_t — Целое число — Тип данных, который может быть доступен атомарно (см. раздел 21.1.3)
siginfo_t — Структурный тип — Информация об источнике сигнала (см. раздел 21.4)
sigset_t — Целое число или структурный тип — Набор сигналов (см. раздел 20.9)
size_t — Целое число без знака — Размер объекта в байтах
socklen_t — Целочисленный тип, состоящий как минимум из 32 разрядов — Размер адресной структуры сокета в байтах (см. раздел 52.3)
speed_t — Целое число без знака — Скорость строки терминала (см. раздел 58.7)
ssize_t — Целое число со знаком — Количество байтов или (при отрицательном значении) признак ошибки
stack_t — Структурный тип — Описание дополнительного стека сигналов (см. раздел 21.3)