Разработка приложений в среде Linux. Второе издание
Шрифт:
Ниже описано подмножество, используемое для интерфейсов.
dev_t | Арифметический тип данных, содержащий старшие (major) и младшие (minor) числа, соответствующие специальным файлам устройств, обычно расположенным в подкаталоге /dev . В Linux dev_t можно манипулировать с помощью макросов major , minor и makedev , которые определены в <sys/sysmacros.h> . Обычно dev_t используется только в системном программировании, описанном в главе 11. |
uid_t , gid_t | Целочисленные типы, содержащие уникальные идентификаторы, соответственно, пользователя и группы. Удостоверения идентификаторов пользователя и группы рассматриваются в главе 10. |
pid_t | Целочисленный тип, обеспечивающий уникальное значение для системного процесса (описан в главе 10). |
id_t | Целочисленный тип, способный хранить без усечения любой
pid_t , uid_t или gid_t . |
off_t | Целочисленный тип со знаком для измерения размера файла в байтах. |
size_t | Целочисленный тип без знака для измерения размеров объектов в памяти, например, символьных строк, массивов или буферов. |
ssize_t | Целочисленный тип со знаком для подсчета байтов (положительные значения) или хранения кода возврата ошибки (отрицательные значения). |
time_t | Целочисленный тип (во всех обычных системах) или тип с плавающей точкой (позволяет рассматривать VMS как операционную систему POSIX), выдающий время в секундах, как описано в главе 18. |
Типы намеренно описаны нечетко. Нет никакой гарантии, что типы будут одинаковыми на двух разных платформах Linux или даже в двух различных средах, работающих на одной и той же платформе. Скорее всего, 64-разрядная машина, поддерживающая как 64-разрядную, так и 32-разрядную среды, будет иметь разные значения для некоторых из этих типов в каждой среде.
Кроме того, в будущих версиях Linux представленные типы могут изменяться в рамках, установленных стандартом POSIX.
6.2.2. Раскрытие возможностей времени выполнения
Многие системные возможности имеют ограничения, другие являются необязательными, а некоторые могут содержать связанную с ними информацию. Ограничение на длину строки аргументов, передаваемых новой программе, защищает систему от произвольных запросов памяти, которые в ряде случаев могут вызвать крах системы. Не во всех системах POSIX реализовано управление заданиями. Любая программа может получить сведения о наиболее поздней версии стандарта POSIX, которая реализована в системе.
Функция
Целочисленный аргумент в
_SC_CLK_TCK | Возвращает количество тактов в секунду внутренних часов ядра, различаемое программами. Следует отметить, что ядро может содержать одни или больше часов, работающих на более высокой частоте. _SC_CLK_TCK обеспечивает подсчет тактов, которые используются для получения информации из ядра, и этот макрос не является индикатором времени ожидания системы. |
_SC_STREAM_MAX | Возвращает максимальное количество стандартных потоков ввода-вывода С, которые могут быть одновременно открыты в системе. |
_SC_ARG_MAX | Возвращает максимальную длину аргумента командной строки и переменных окружения в байтах, которые используются любой из функций exec . Если это ограничение превышено, exec вернет ошибку Е2ВIG . |
_SC_OPEN_MAX | Возвращает максимальное количество файлов, которые одновременно могут быть открыты процессом; это то же самое, что и программное ограничение RLIMIT_NOFILE , которое может быть запрошено функцией getrlimit и установлено функцией setrlimit . Это единственное значение sysconf , которое может изменяться во время выполнения программы; при вызове setrlimit для изменения ограничения RLIMIT_NOFILE . _SC_OPEN_MAX также подчиняется новому программному ограничению. |
_SC_PAGESIZE или _SC_PAGE_SIZE | Возвращает размер одной страницы в байтах. В системах, которые могут поддерживать разные размеры страниц, возвращается размер одной обычной страницы, для которой выделено определенное количество памяти и которая считается естественным размером страниц для конкретной системы. |
_SC_LINE_MAX | Возвращает максимальную длину в байтах входной строки, обрабатываемой текстовыми утилитами, включая завершающий символ новой строки. Следует отметить, что во многих утилитах GNU, используемых в Linux-системах, фактически нет жестко закодированной максимальной длины строки, потому могут применяться входные строки произвольной длины. Однако переносимая программа не должна вызывать текстовые утилиты для строк, длина которых превышает _SC_LINE_MAX ; во многих Unix-системах утилиты работают с фиксированным максимальным размером строки, и его превышение может привести к неопределенным результатам. |
_SC_NGROUPS_MAX | Возвращает количество дополнительных групп (см. главу 10), которые может иметь процесс. |
6.2.3. Поиск и настройка базовой системной информации
Существует несколько порций полезной информации о системе, которая может понадобиться программе. Например, название и версия операционной системы могут служить для определения функциональности, предлагаемой системными программами.
Системный вызов
В случае ошибки функция возвращает ненулевое значение, что происходит только в ситуациях, когда передается недопустимый указатель
Таблица 6.1. Члены структуры
Член | Описание |
---|---|
sysname | Название операционной системы (в данном случае Linux ). |
release | Номер версии выполняющегося ядра. Это полная версия вроде 2.6.2 . Номер может быть легко изменен тем, кто выполнял сборку ядра, и вполне возможно, что цифр будет больше трех. Во многих версиях можно встретить дополнительную цифру для описания примененных исправлений, например, 2.4.17-23 . |
version | Под Linux здесь содержится временная метка, описывающая время, когда собиралось ядро. |
machine | Короткая строка, указывающая тип микропроцессора, на котором работает операционная система. Для Pentium Pro или более мощных она может быть i686 , для процессоров класса Alpha — alpha , а для 64-разрядных процессоров PowerPC — ррс64 . |
nodename | Имя хоста машины, которое обычно является первичным именем хоста в Internet. |
domainname | Домен NIS (или YP), которому принадлежит машина. |
Член
Более распространенная ситуация связана с домашними компьютерами, которые используют Internet-каналы широкополосной связи. Обычно их имя хоста в Internet выглядит вроде
6
Большинство, но не все, поставщики услуг доступа в Internet назначают динамические IP-адреса, а не статические.
Имя узла системы устанавливается с помощью системного вызова
Оба этих системных вызова принимают указатель на строку (не обязательно завершающуюся
7
Несмотря на имя, которое может ввести в заблуждение, этот системный вызов устанавливает имя узла, а не имя Internet-хоста машины.
8
Сетевые информационные службы (Network Information Services — NIS) предоставляют для машин в сети механизм совместного использования информации, такой как пользовательские имена и пароли. Ранее они назывались "желтыми страницами" (Yellow Pages — YP). Имя домена NIS — часть этого механизма, который реализуется за пределами ядра системы с тем исключением, что доменное имя хранится в структуре
6.3. Совместимость
Приложения, которые скомпилированы с заголовочными файлами из библиотеки
Существуют практические ограничения для обратной совместимости. Во-первых, смешивание объектов из разных версий
Обратная совместимость поддерживается тогда, когда задействованы символы, разработанные специально для соответствия стандартам версий. Когда разработчики