Программирование >>  Структура ядра и системные вызовы 

1 2 3 [ 4 ] 5 6 7 ... 98


if ((res=pathconf( / . PC PATH MAX))==-!). . perror( pathconf ); ,

else

cout Max path name: (res+1) <endl;

if ((res=fpathconf(0, PC CHOWN RESTRICTED))==-1) perror( fpathconf );

else

cout << chown restricted for stdin: res endl; return 0;

1.5. Стандарт P0SIX.1 FIRS

FjpS это Federal Information Processing Standard (федеральный стандарт на обработку информации). Стандарт POSIX. 1 FIPS был разработан Национальным институтом стандартов и технологий США (NIST, ранее - Национальное бюро стандартов), который подчиняется Министерству торговли США. Последний вариант этого стандарта, FIPS 151-1, построен на основе стандарта POSIX. 1-1988. Стандарт POSIX. 1 FIPS - это руководящий документ для федеральных ведомств, приобретающих компьютерные системы. В частности, согласно стандарту FIPS, являющемуся ограниченным вариантом стандарта POSIX. 1-1988, все FIPS-совместимые системы должны соответствовать следующим требованиям:

Управление заданиями; должен быть определен макрос POSIX JOB CONTROL.

Поддержка сохранения установленных UID и GID; должен быть определен макрос POSIX SAVEDJDS.

Отсутствие поддержки длинных путевых имен; должен быть определен макрос POSIX NO TRUNC с любым значением, кроме -1.

Должен быть определен макрос POSIX CHOWN RESTRICTED с лю.

бым значением, кроме -1. Это значит, что изменять принадлежность файлов во всей системе может только уполномоченный на это пользователь.

Должен быть определен макрос POSIX VDISABLE с любым значением, кроме -1.

Значение символа NGROUP MAX должно быть равно минимум 8.

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

Идентификатор группы вновь созданного файла должен наследовать идентификатор группы каталога, который его содержит.

Стандарт FIPS содержит больше ограничений, чем стандарт POSIX. 1, поэтому система, соответствующая FIPS 151-1, соответствует и POSIX. 1-1988 (но не наоборот). По сравнению с последней версией POSIX. 1 стандарт FIPS устарел и используется главным образом федеральными ведомствами США. По этой причине мы акцентируем внимание не на FIPS, а на POSIX. 1.

1.6. Стандарты Х/Ореп

Организация Х/Ореп была создана группой европейских компаний с целью разработки общего интерфейса операционных систем для производимых ими компьютеров. В 1989 году организация издала выпуск 3 руководства по разработке переносимого программного обеспечения Х/Ореп Portability Guide (XPG3), а в 1994 году - выпуск 4. В этих документах определяется набор общих средств и функций интерфейсов прикладного программирования языка С, которые должны присутствовать во всех открытых системах на базе UNIX. Руководства XPG3 [9] и XPG4 [10] основаны на стандартах ANSI С, POSIX. 1, POSIX.2 и содержат дополнительные конструкции, разработанные организацией Х/Ореп.

Кроме того, в 1993 году несколько фирм-производителей компьютеров (Hewlett-Packard, International Business Machines, Novell, Open Software Foundation, Sun Microsystems) инициировали проект под названием Common Open Software Environment (COSE, общая открытая программная среда). Целью проекта было разработать единую специфшсацию интерфейса программирования для UNIX, которую поддерживали бы все фирмы. Эта спецификация известна как Spec 1170 и включена в XPG4 как часть спецификаций Common Application Environment (CAE, общая прикладная среда) организации Х/Ореп.

Спецификации CAE имеют гораздо более широкую область применения, чем стандарты POSIX и ANSI С. Это значит, что приложения, которые соответствуют Х/Ореп, обязательно соответствуют и стандартам ANSI С и POSIX (но не наоборот). Кроме того, хотя большинство производителей компьютеров и независимых продавцов программного обеспечения приняли POSIX и ANSI С, некоторым из них еще предстоит обеспечить соответствие стандартам Х/Ореп. Учитывая все это, мы акцентируем внимание в основном на общем для всех систем интерфейсе системного программирования для UNIX и стандартах ANSI С, POSIX. Подробную информацию о спецификациях Х/Ореп CAE читатели смогут получить из [4,5].

1.7. Заключение

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



1.8. Литература

1. O-J. Dahl, В. Myrhaug, and К. Nygaard, SIMULA Common Base Language, 1970.

2. Bjarne Stroustrap, The С++ Programming Language, Second Edition, 1991.

3. Margaret A. Ellis, and Bjarne Stroustrup, The Annotated С++ Reference Manual, Addison-Wesley, 1990.

4. Andrew Koenig, Working Paper for Draft Proposed International Standard for Information Systems - Programming Language С++ (Committees: WG21/N0414, X3J16/94-0025), 1994.

5. American National Standard Institute, American National Standard for Information Systems - Programming Language C, X3.159 - 1989, 1989.

,6. Institute of Electrical and Electronics Engineers, Information Technology - Portable Operating System Interface (POSIX) Part 1: System Application Program Interface (API) [C language], IEEE 1003.1, 1990.

7. Institute of Electrical and Electronics Engineers, Information Technology - Portable Operating System Interface (POSIX) Part 1: System Application Program Interface (API) [C language] - Amendment: Real- Time Extension, IEEE 1003. lb, 1993.

8. Institute of Electrical and Electronics Engineers, Information Technology - Portable Operating System Interface (POSIX) Part 1: System Application Program Interface (API) [C language] - Amendment: Thread Extension, IEEE 1003. Ic, 1995.

9. X/Open, X/Open Portability Guide, Prentice Hall, 1989.

10. X/Open, X/Open CAE Specification, Issue 4, Prentice Hall, 1994.

ГЛАВА


Обзор языка С++

Эта глава содержит обзор основных конструкций языка С++, который соответствует проекту стандарта ANSI/ISO [1]. Предполагается, что читатели знакомы с языком С++, хотя бы на начальном уровне. В главе дается беглый обзор методов программирования на С++, что позволит освежить их в памяти читателя. Описываются новые особенности языка, определенные стандартом ANSI/ISO,- шаблоны классов, а также методы обработки исключительных ситуаций. Читатели, которым нужны более подробные справки по этому языку программирования, могут обратиться к [2, 3].

Помимо описания конструкций языка С++ в этой главе рассматриваются также стандартные классы ввода-вывода и методы объектно-ориентированного программирования. Стандартные классы ввода-вывода - очень мощное и функционально богатое средство. Они фактически заменяют функции потокового ввода-вывода и строковые функции языка С. Знание классов ввода-вывода позволит добиться максимально высокой степени многократного использования кода, сократить время и стоимость разработки приложений.

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



2.1. Средства объектно-ориентированного программирования в С++

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

Класс позволяет делать недоступными внутренние данные, представляя их как открытые (public), закрытые (private) и защищенные (protected). Открытые данные класса доступны для любых пользовательских функций, не определенных внутри класса. Закрытые данные доступны только для функций-членов, определенных в этом классе. Наконец, защищенные данные класса являются закрытыми для всех пользовательских функций, но открытыми для всех функций-членов класса и функций-членов подклассов. Такая сложная схема доступа имеет целью позволить разработчикам управлять доступом к данным объектов различных классов и манипулировать ими. Однако она не дает возможности изменять данные объектов класса где-нибудь в пользовательской программе. Более того, любые изменения закрытых и защищенных данных класса будут в минимальной степени влиять на пользовательские функции при условии, что функции-члены, применяемые при обращении к этим данным, останутся неизменными.

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

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

Как и другие объектно-ориентированные языки, С++ поддерживает для классов функцию-конструктор и функцию-деструктор. Эти функции обеспечивают надлежащую инициализацию объектов при их создании и удаление данных при их ун№тгожении. Кроме того, в С++для вьщеления и освобождения динамической памяти объектам определены операции new и delete. Однако

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

Стандарт ANSI/ISO С++ поддерживает шаблоны классов и функций. Шаблоны позволяют пользователям создавать и отлаживать некоторые родовые (generic) классы и функции. На основе шаблонов могут быть заданы реальные классы и функции, работающие с различными типами данных. Это значительно экономит время разработки и отладки программ. Помимо этого, в С++ определен формальный метод обработки исключительных ситуаций, которые могут возникнуть в программах. Для всех приложений С++ предусмотрены единые методы такой обработки.

Подведем итоги и сформулируем основные цели объектно-ориентированного программирования:

абстрактное представление данных с целью создания четко определенного интерфейса для всех объектов;

наследование классов, способствующее многократному использованию кода;

полиморфизм, при котором классы, производные от других классов, могут содержать данные и функции, отличные от тех, которые определены в порождающих классах;

моделирование объектов и их взаимодействия в реальных ситуациях.

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

2.2. Объявление классов в С++

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

Если ссылка на данное-член или функцию-член класса дается за пределами места объявления класса, необходимо уточнить их имена с помощью



1 2 3 [ 4 ] 5 6 7 ... 98

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика