Новые книги

В той отрасли, где мы работаем, библиотека DirectDraw появилась довольно давно. Во всяком случае, за это время она успела доказать свои возможности, и о ней было написано несколько книг. Как обычно, эти книги отличаются по своему качеству. Однако в основном это были добротные учебники, которые (как и многие книги о компьютерах) были написаны за три месяца авторами, изучавшими предмет по ходу дела. В результате большинство этих книг содержит лишь подготовительный материал. Теперь, когда библиотека DirectDraw подросла и обрела свою репутацию (во всяком случае, она старше других компонентов DirectX), настало время уйти от основ и познакомиться с ее некоторыми нетривиальными возможностями.

Эта книга начинается с того, на чем другие книги обычно заканчивались. Мы поговорим об основах DirectDraw, но лишь в общих чертах. Читатель — опытный программист, но незнакомый с DirectDraw — сможет с ходу войти в курс дела. Затем мы перейдем к другим темам, столь же интересным, сколь и полезным.

Цель этой книги — научить вас работать с DirectDraw, а не предоставить некоторую «структурную основу» или нестандартный API, который бы выполнял за вас всю работу. Демонстрационные программы написаны на C++ и используют MFC, но совсем не для того, чтобы скрыть все технические подробности. С++ и MFC — превосходные инструменты, потому что с их помощью любое приложение можно написать несколькими разными способами. Примеры для этой книги были написаны так, чтобы при этом получались структурированные и удобные для чтения проекты, которые наглядно показывают, что и почему происходит в программе.

Помимо DirectDraw, во многих примерах используется библиотека DirectInput. Строго говоря, при программировании графики для Windows можно обойтись и без DirectInput, но ей все же стоит воспользоваться. Она работает быстрее традиционных средств ввода Windows и к тому же входит в DirectX, так что для работы с ней не потребуется никаких дополнительных SDK.
Рассмотрены основные элементы теории организации, разновидности организаций, управление в организационных системах и основы проектирования организационных отношений. Изучение курса позволяет сформировать и развить способности проектировать организационную структуру, распределять полномочия и ответственность на основе их делегирования, оценивать условия и последствия принимаемых организационно-управленческих решений, а также другие компетенции в области формирования и развития организационной структуры, организационных отношений и корпоративной культуры.

Соответствует Федеральному государственному образовательному стандарту высшего профессионального образования третьего поколения.

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

5.8 СОЗДАНИЕ СПЕЦИАЛЬНЫХ ФАЙЛОВ

 

5.8 СОЗДАНИЕ СПЕЦИАЛЬНЫХ ФАЙЛОВ

Системная функция mknod создает в системе специальные файлы, в число которых включаются поименованные каналы, файлы устройств и каталоги. Она похожа на функцию creat в том, что ядро выделяет для файла индекс. Синтаксис вызова системной функции mknod:

   mknod(pathname,type and permissions,dev)

где pathname - имя создаваемой вершины в иерархической структуре файловой системы, type and permissions - тип вершины (например, каталог) и права доступа к создаваемому файлу, а dev указывает старший и младший номера устройства для блочных и символьных специальных файлов (глава 10). На Рисунке 5.13 приведен алгоритм, реализуемый функцией mknod при создании новой вершины.


     алгоритм создания новой вершины                            
     входная информация:  вершина (имя файла)                   
                          тип файла                             
                          права доступа                         
                          старший, младший номера устройства    
                          (для блочных и символьных специальных 
                          файлов)                               
     выходная информация: отсутствует                           
     {                                                          
        если (новая вершина не является поименованным каналом   
         и пользователь не является суперпользователем)         
            возвратить (ошибку);                                
        получить индекс вершины, являющейся родительской для    
         новой вершины (алгоритм namei);                        
        если (новая вершина уже существует)                     
        {                                                       
            освободить родительский индекс (алгоритм iput);     
            возвратить (ошибку);                                
        }                                                       
        назначить для новой вершины свободный индекс из файловой
         системы (алгоритм ialloc);                             
        создать новую запись в родительском каталоге: включить  
         имя новой вершины и номер вновь назначенного индекса;  
        освободить индекс родительского каталога (алгоритм      
         iput);                                                 
        если (новая вершина является блочным или символьным спе-
         циальным файлом)                                       
            записать старший и младший номера в структуру индек-
             са;                                                
       освободить индекс новой вершины (алгоритм iput);        
     }                                                          

Рисунок 5.13. Алгоритм создания новой вершины

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


     алгоритм смены каталога                                   
     входная информация:  имя нового каталога                   
     выходная информация: отсутствует                           
     {                                                          
        получить индекс для каталога с новым именем (алгоритм   
         namei);                                                
        если (индекс не является индексом каталога или же про-  
         цессу не разрешен доступ к файлу)                      
        {                                                       
           освободить индекс (алгоритм iput);                   
           возвратить (ошибку);                                 
        }                                                       
        снять блокировку с индекса;                             
        освободить индекс прежнего текущего каталога (алгоритм  
         iput);                                                 
        поместить новый индекс в позицию для текущего каталога  
         в пространстве процесса;                               
     }                                                          

Рисунок 5.14. Алгоритм смены текущего каталога

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