Читаем Linux API. Исчерпывающее руководство полностью

В различных реализациях UNIX существуют разные версии стандартной библиотеки языка C. Наиболее часто используемой реализацией в Linux является GNU-библиотека языка C (glibc, http://www.gnu.org/software/libc/).

Первоначально основным разработчиком и специалистом по обслуживанию GNU-библиотеки C был Роланд Макграт (Roland McGrath). До 2012 года этим занимался Ульрих Дреппер (Ulrich Drepper), после чего его полномочия были переданы сообществу разработчиков, многие из которых перечислены на странице https://sourceware.org/glibc/wiki/MAINTAINERS.

Для Linux доступны и другие реализации/версии библиотеки C, среди которых есть и такие, которым требуется (относительно) небольшой объем памяти, а предназначены они для встраиваемых приложений. В качестве примера можно привести uClibc (http://www.uclibc.org/) и diet libc (http://www.fefe.de/dietlibc/). В данной книге мы ограничиваемся рассмотрением glibc, поскольку именно эта библиотека языка C используется большинством приложений, разработанных под Linux.

Определение версии glibc в системе

Иногда требуется определить версию имеющейся в системе библиотеки glibc. Из оболочки это можно сделать, запустив совместно используемый библиотечный файл glibc, как будто он является исполняемой программой. Когда библиотека запускается как исполняемый файл, она выводит на экран разнообразную информацию, включая номер версии glibc:

$ /lib/libc.so.6

GNU C Library stable release version 2.10.1, by Roland McGrath et al.

Copyright (C) 2009 Free Software Foundation, Inc.

This is free software; see the source for copying conditions.

There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A

PARTICULAR PURPOSE.

Compiled by GNU CC version 4.4.0 20090506 (Red Hat 4.4.0–4).

Compiled on a Linux >>2.6.18-128.4.1.el5<< system on 2009-08-19.

Available extensions:

The C stubs add-on version 2.1.2.

crypt add-on version 2.1 by Michael Glad and others

GNU Libidn by Simon Josefsson

Native POSIX Threads Library by Ulrich Drepper et al

BIND-8.2.3-T5B

RT using linux kernel aio

For bug reporting instructions, please see:

<http://www.gnu.org/software/libc/bugs.html>.

В некоторых дистрибутивах Linux GNU-библиотека C находится в другом месте, путь к которому отличается от /lib/libc.so.6. Один из способов определить местоположение библиотеки — выполнить программу ldd (list dynamic dependencies — список динамических зависимостей) в отношении исполняемого файла, имеющего динамические ссылки на glibc (ссылки такого рода имеются у большинства исполняемых файлов). Затем можно изучить полученный в результате этого список библиотечных зависимостей, чтобы найти местоположение совместно используемой библиотеки glibc:

$ ldd myprog | grep libc

libc.so.6 => /lib/tls/libc.so.6 (0x4004b000)

Есть два средства, с помощью которых прикладная программа может определить версию библиотеки GNU C в системе: тестирование констант или вызов библиотечной функции. Начиная с версии 2.0, в glibc определяются две константы, __GLIBC__ и __GLIBC_MINOR__, которые могут быть протестированы в ходе компиляции (в инструкциях #if). В системе с установленной glibc 2.12 эти константы будут иметь значения 2 и 12. Но использование этих констант не принесет пользы в программе, скомпилированной в одной системе, но запущенной в другой системе с отличающейся по версии библиотекой glibc. Учитывая вышесказанное, можно воспользоваться функцией gnu_get_libc_version() для определения версии glibc доступной во время исполнения программы.

#include

const char *gnu_get_libc_version(void);

Возвращает указатель на заканчивающуюся нулевым байтом статически размещенную строку, содержащую номер версии библиотеки GNU C

Функция gnu_get_libc_version() возвращает указатель на строку вида 2.12.

Информацию о версии можно также получить, воспользовавшись функцией confstr() для извлечения значения конфигурационной переменной (относящегося к конкретной glibc-библиотеке) _CS_GNU_LIBC_VERSION. В результате вызова функции будет возвращена строка вида glibc 2.12.

3.4. Обработка ошибок, возникающих при системных вызовах и вызовах библиотечных функций

Почти каждый системный вызов и вызов библиотечной функции завершаются возвратом какого-либо значения, показывающего, чем все завершилось — успехом или неудачей. Надо всегда проверять код завершения, чтобы можно было убедиться в успешности вызова. Если успех вызову не сопутствовал, нужно предпринимать соответствующее действие — как минимум программа должна вывести на экран сообщение об ошибке, свидетельствующее о том, что случилось нечто неожиданное.

Перейти на страницу:

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных

Все жанры