Выбрать главу

Каждый из этих типов определен с помощью имеющегося в языке 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)