Logo    
Деловая газета CitCity.ru CITKIT.ru - все об Open Source Форумы Все публикации Учебный центр Курилка
CitForum    CITForum на CD    Подписка на новости портала Море(!) аналитической информации! :: CITFORUM.RU
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

04.07.2009

Google
WWW CITForum.ru

Стандартные библиотеки

Очевидным требованием к операционной среде, поддерживающей мобильное прикладное программирование, является то, что все функции, предоставляемые ею прикладной программе, должны быть четко специфицированы и должны точно соответствовать этим спецификациям в любой реализации операционной среды. В UNIX-ориентированных средах это требование удовлетворяется за счет наличия нескольких стандартизованных библиотек функций и соответствующих наборов файлов заголовков (header-файлов).

Библиотека системных вызовов

Базовой библиотекой любого варианта системы UNIX является библиотека системных вызовов. Сейчас невозможно найти два варианта ОС UNIX с разными названиями, наборы системных вызовов которых полностью бы совпадали. Однако, любой такой вариант поддерживает системные вызовы, которые специфицированы в стандартах, упоминаемых в разделе 7.5. К полностью стандартным системным вызовам относятся системные вызовы для работы с файлами (включая специальные файлы), системные вызовы для управления процессами (fork и семейство exec), системные вызовы класса IPC (хотя, как мы упоминали в п. 3.5.4, в UNIX System V механизм программных каналов реализован не в виде набора системных вызовов ядра ОС, а как набор библиотечных функций над пакетом TLI). Приведенное в скобках замечание на самом деле является очень важным. Пользователя, стремящегося создать мобильное приложение с использованием системных вызовов, не должны волновать детали реализации. Важно, чтобы состав системных вызовов, их интерфейсы и семантика соответствовали стандартам.

Теперь мы можем сформулировать правило прикладного мобильного программирования с использованием системных вызовов:

Проектируя и разрабатывая прикладную систему, убедитесь, что вы не используете системные вызовы, не входящие в стандарт.

Придерживаясь этого правила, с большой вероятностью вы не будете иметь проблем с переносом программы в среду другого варианта ОС UNIX по причине несовместимости наборов системных вызовов.

Библиотека ввода/вывода

Традиционной для ОС UNIX библиотекой функций более высокого уровня, чем библиотека системных вызовов, является, так называемая, стандартная библиотека ввода/вывода (stdio). Основной набор функций этой библиотеки служит для выполнения файловых операций с буферизацией данных в памяти пользовательского процесса. Библиотека ввода/вывода фактически стандартизована очень давно, и ей можно безопасно пользоваться в любой операционной среде. В частности, единообразные библиотеки ввода/вывода поддерживаются во всех современных реализациях системы программирования языка Си, выполненных не в среде ОС UNIX (включая реализации в среде MS-DOS).

Поэтому можно сформулировать правило мобильного программирования с использованием библиотеки ввода/вывода:

Если для разрабатываемой вами прикладной программы достаточно возможностей библиотеки ввода/вывода, ограничьтесь использованием этой библиотеки.

Придерживаясь этого правила, с большой вероятностью вы не будете иметь проблем, связанных с вводом/выводом, при переносе вашей программы в любую операционную среду (не обязательно UNIX-ориентированную), в которой поддерживается стандартная библиотека ввода/вывода.

Дополнительные библиотеки

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

Наиболее безопасным решением на сегодняшний день (при программировании на языке Си) является использование библиотек, специфицированных в стандарте языка Си. Наверное, стандартных библиотек Си окажется недостаточно в случае сложных приложений, но если при указании опции "ANSI" ваша система программирования успешно производит сборку выполняемой программы, можно быть почти уверенным, что вы не будете иметь проблем при переносе программы на компьютер, на котором установлен компилятор стандартного языка Си.

Поэтому можно сформулировать правило мобильного программирования с использованием дополнительных библиотек:

Если для разрабатываемой вами прикладной системы оказывается достаточным использование библиотек, специфицированных в стандарте языка Си, ограничьтесь использованием этих библиотек.

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

Файлы заголовков

Использование текстовых файлов заголовков (header-файлов), которые вставляются в текст программы на языке Си с помощью директивы include препроцессора Си, является традиционной техникой программирования на языке Си в среде ОС UNIX, обеспечивающей синтаксическую правильность использования библиотечных функций (в том числе и системных вызовов) в прикладной программе. Ранее файлы заголовков, главным образом, содержали определения типов и символических констант (символические константы - это константы, которым сопоставлены имена посредством директивы define препроцессора Си), используемых в интерфейсах соответствующих библиотечных функций. Корректное применение файлов заголовков позволяло программистам не заботиться о правильности типов данных, используемых при обращении к библиотечным функциям и обработке их результатов.

Однако, традиционные файлы заголовков не гарантировали того, что набор параметров вызываемой библиотечной функции соответствовал ее интерфейсу, поскольку объявление функции, содержащее ее интерфейс, в файле компиляции отсутствовало. В лучшем случае ошибки такого рода устойчиво проявлялись во время выполнения программы, хотя далеко не всегда было просто понять их природу. В худшем случае ошибка возникала при переносе программы, поскольку одноименные библиотечные функции действительно обладали разными интерфейсами в разных средах, и в исходной операционной среде ошибки в параметрах не было.

Эту проблему удалось решить (хотя и не абсолютно) за счет введения в язык Си понятия прототипа функции. Грубо говоря, прототип функции - это часть ее объявления, содержащая только интерфейс (без тела функции). Наличие прототипа любой функции допускается в любом файле компиляции, даже не обязательно содержащем вызов этой функции. Однако, если вызов функции содержится в файле компиляции, то набор параметров вызова должен точно соответствовать интерфейсу вызываемой функции, определенному в ее прототипе.

Дальнейший ход рассуждений очевиден. Для группы родственных библиотечных функций делается общий файл заголовков, содержащий необходимые определения типов данных и символических констант, а также набор прототипов этих библиотечных функций. После включения в файл компиляции такого файла заголовков на стадии компиляции будут обнаружены все синтаксические ошибки обращения к библиотечным функциям. В предыдущем параграфе мы отметили, что это решение не абсолютно. Это действительно так, поскольку в принципе никто не может заставить программиста на языке Си включать в текст программы все требуемые файлы заголовков. Однако, такова специфика мира программирования: каждый волен усложнять свою жизнь в такой степени, в которой ему или ей это нравится.

Последнее замечание относительно файлов заголовков. В последнее время они содержат большое количество операторов условной компиляции, относящихся большей частью к определению символических констант. Дело в том, что в зависимости от версии операционной системы (мы имеем в виду версии одной линии ОС UNIX, например, UNIX System V) значения констант, используемых с одним и тем же смыслом, часто меняются. Конечно, прикладная программа не должна зависеть от таких изменений. Наличие операторов условной компиляции внутри файла заголовков разрешает эту проблему.

Поэтому последнее правило этого раздела можно сформулировать следующим образом:

При программировании на языке Си с использованием библиотечных функций используйте все требуемые файлы заголовков. Это поможет быстрее найти ошибки и повысит мобильность прикладной программы.

Предыдущая глава | Оглавление | Следующая глава

Подписка на новости IT-портала CITForum.ru
(библиотека, CITKIT.ru, CitCity)

Новые публикации:

1 июля

CITKIT.ru:

  • Fedora - не горе?
  • Немного о клавиатурных раскладках
  • Typewriter-like раскладки
  • ASUS EEE PC 701. Личный Опыт (В.Попов)
  • CitCity:

  • iPhone 3GS, самая ожидаемая новинка сезона

  • MSI X340 - недорогая альтернатива MacBook Air

    24 июня

  • Книга Руководство командой разработчиков программного обеспечения. Прикладные мысли (С.Архипенков)

    CITKIT.ru:

  • Грядущая судьба коалы, или Ubuntu 9.10
  • Synaptic в Xubuntu: практическое использование
  • Вокруг Школьного проекта: к вопросу о бракованных дисках
  • Как сделать книгу
  • Слово оппоненту
  • Ubuntu: сетевая установка
  • 17 июня

  • Системы и методы обнаружения вторжений: современное состояние и направления совершенствования

    CITKIT.ru:

  • Еще раз про udev
  • Разборки с HAL'ом
  • Повесть о PocketBook 301 Plus
  • Дискуссионный клуб:

  • Апокалипсис для СПО? (А.Федорчук)
  • Две проблемы? (С.Голубев)
  • 10 июня

  • Краткий технический обзор грид-сервера хранения данных HP Oracle Exadata

    В.Пржиялковский. Бумажник Oracle Wallet:

    CITKIT.ru:

  • Изменяющийся облик open source
  • Linux в школе: продолжение проекта
  • А.Федорчук. Linux'ы на недобуке:

  • Прощай, консоль?
  • 3 июня

  • Специализированные языки (М.Шапиро, перевод: С.Кузнецов)

    CITKIT.ru:

  • Chromium для Linux: первые впечатления
  • Кое-что о настройке сети в современных Ubuntu'идах
  • Дистрибутивы на флэшках: не хочу больше болванить!
  • Самый главный аргумент
  • 27 мая

    CitCity:

  • Экономический кризис и рынок IT. Перспективы внедрения BI
  • Роль интеграции данных в условиях экономического спада
  • Причины неэффективного внедрения Business Intelligence

    CITKIT.ru:

  • Виктор Иванников: зачастую все начиналось именно с открытого кода
  • Asus EeePC 2G: недобук par exellence
  • Linux'ы на недобуке: кому прижиться?
  • Еще раз о копирайте
  • 20 мая

    CitCity:

  • Интервью с Сураджитом Чаудхари

    CITKIT.ru:

  • Synaptic в Xubuntu: общие сведения
  • Synaptic в Xubuntu: настройки
  • Нетбук на батарейках: первая ласточка
  • Краткая история копирайта
  • 13 мая

    Раздел Классика баз данных:

    Обзор журнала Computer:

    CITKIT.ru:

  • Размышления у "Пиратской бухты"-2
  • Сколько пакетов нужно для счастья?
  • Стратегия дисковой разметки
  • Xubuntu 9.04: впечатления
  • Ubuntu: животные-эпонимы
  • 6 мая

    Обзоры журнала Computer:

    CITKIT.ru:

  • Тестируем ext4
  • Танцующий Медведь
  • Свободная пятерка
  • Рассуждения о микроблоггинге
  • 29 апреля

  • Материалы конференции "Корпоративные базы данных-2009"
  • CitCity:

  • С.Кузнецов. Облака спускаются на землю (отчет о конференции)

    CITKIT.ru:

  • Дискуссия о нетбуках:

  • Блогометки:

    22 апреля

  • HP Oracle Exadata Storage Server – оптимизированная платформа для Oracle BI-хранилищ данных
  • CITKIT.ru:

  • Еще раз о без-win'ных машинах: кому и зачем они нужны?
  • FOSS на Руси: революционная ситуация?
  • Размышления у "Пиратской бухты"
  • 15 апреля

    CITKIT.ru:

  • OpenSolaris на ноутах Toshiba, или как следует бороться с засильем сами знаете кого
  • Red Hat, hardlinks и сетевые настройки
  • От GRUB до GRUB4DOS
  • Сергей Голубев. Цикл "Linux в школе":
  • Windows XP - завершение поддержки
  • 8 апреля

  • Раздел Классика баз данных:

    CITKIT.ru:

  • Zenbook. Инструментальная настройка
  • Zenwalk. Большая чистка
  • Установка PC-BSD 7.1-RC1. Приключения и впечатления
  • Смесь бульдога с носорогом, или Debian GNU/kFreeBSD
  • Один на один с Windows XP
  • 1 апреля

  • М.Ривкин. Тенденции развития универсальных коммерческих СУБД
  • Раздел Классика баз данных:

    CITKIT.ru:

  • И обратно о лицензиях: 1. По мотивам RMS
  • И обратно о лицензиях: 2. По мотивам ESR
  • Zenbook. Инициализация системы
  • О поддержке оборудования "на пальцах"
  • Все публикации >>>




    IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

    Информация для рекламодателей PR-акции, размещение рекламы — тел. +7 495 4119920, ICQ 232284597 Пресс-релизы — pr@citcity.ru
    Послать комментарий
    Информация для авторов
    Rambler's Top100 TopList liveinternet.ru: показано число просмотров за 24 часа, посетителей за 24 часа и за сегодня This Web server launched on February 24, 1997
    Copyright © 1997-2000 CIT, © 2001-2009 CIT Forum
    Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...