The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

Интерактивная система просмотра системных руководств (man-ов)

 ТемаНаборКатегория 
 
 [Cписок руководств | Печать]

xpak (1)
  • >> xpak (1) ( Русские man: Команды и прикладные программы пользовательского уровня )
  • XPAK

    НАЗВАНИЕ

    xpak - формат данных XPAK, используемый в бинарных пакетах Portage

    КРАТКОЕ ОПИСАНИЕ

    К каждому бинарному пакету Gentoo прилагаются данные xpak, которые содержат различную информацию времени сборки - например, USE-флаги, с которыми пакет был скомпилирован, исходный ебилд, переменные окружения, значения переменных CFLAGS и CXXFLAGS и т.д.

    ПРИМЕЧАНИЯ

    Типы данных

    Ниже описаны все рассматриваемые в данной документации случаи.

    Целое число

    Все отступы/длины являются беззнаковыми 32-разрядными целыми числами, с порядком следования байт от старшего к младшему.

    Строка

    Все строки в кодировке ASCII и не оканчиваются на NUL (кавычки - только для иллюстрации)

    Значение

    Текущие значения отдельных записей xpak хранятся как строки.

    Вертикальная черта

    Вертикальная черта '|' не является частью формата файла; она используется лишь для иллюстрации того, как значения отступа применяются к данным.

    СИНТАКСИС

    бинарный пакет (tbz2)

         |<-отступ_xpak->| 
    <tar>|<    xpak     >|<отступ_xpak>"STOP" 
    

    xpak

    "XPAKPACK"<строка_индекса><строка_данных><индекс><данные>"XPAKSTOP" 
    

    индекс

    |<-------------строка_индекса------------->| 
    |<индекс1><индекс2><индекс3><индекс4><...>| 
    

    индексN

              |<-строка_имени->| 
    <строка_имени>|<   имя   >|<отступ_данных><строка_данных> 
    

    данные

    |<--------------строка_данных------------->| 
    |<-отступ_данныхN->|<-строка_данныхN->| 
    |<     данные     >|<  данные_N   >|<данные>| 
    

    ПОДРОБНОЕ ОПИСАНИЕ

    xpak

    Если вы рассмотрите любой бинарный пакет Gentoo с помощью шестнадцатиричного редактора, вы обнаружите, что он содержит собственно архив файлов, а далее бинарный блоб - xpak, отступ, содержащий байты от начала xpak'а до конца файла - отступ_xpak и, наконец, строку "STOP".

         |<отступ_xpak>| 
    <tar>|<---xpak---->|<отступ_xpak>"STOP" 
    

    В приведенном примере вы можете видеть архив tar, связанный с ним блоб_xpak, отступ_xpak и, в конце, строку "STOP". Эти метаданные не рассматриваются как часть xpak, а скорее как часть бинарного пакета.

    Если мы возьмем значение оступа и отчитаем соответствующее ему количество байтов назад от начала отступа_xpak, то придем к блоку xpak, который начинается со строки "XPAKPACK".

    Блок xpak состоит из строки "XPAKPACK", длины блока индекса (строка_индекса), длины блока данных (строка_данных), бинарный блоб строки_индекса, содержащий индекс, бинарный блоб строки_данных, содержащий данные, и строки "XPAKSTOP" в конце:

                                   |<строка_индекса>|<строка_данных>| 
    "XPAKPACK"<строка_индекса><строка_данных>|<--индекс-->|<--данные-->|"XPAKSTOP" 
    

    Чтобы получить индекс и данные, мы отсекаем с конца строки_данных количество байт, соответствующее строке_индекса (блок индекса), а затем - байты, соответствующие следующей строке_данных (блок данных). Если мы всё сделали правильно, следующие байты будут представлять собой строку "XPAKSTOP" в формате ASCII.

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

    Блок _индекса

    Блок _индекса включает ряд индексов:

    |<-----------------------строка_индексов---------------------->| 
    |<индекс1><индекс2><индекс3><индекс4><индекс5><индекс6><индекс7>| 
    

    Блок индекса содержит всю необходимую нам информацию для блока данных. Он содержит ряд отдельных индексов, которые все вместе составляют строку_индексов. Здесь нет разделения нулем или тому подобного.

    Каждый из этих элементов соответствует фрагменту данных в блоке данных: строка имени этого блока (строка_имени), длина _строки_имени в байтах, оступ блока (отступ_данныхN) и длина блока (_строка_данныхN):

              |<строка_имени>| 
    <строка_имени>|<--имя-->|<отступ_данныхN><строка_данныхN> 
    

    Блок_данных

    Блок_данных содержит ряд фрагментов данных, которые в сумме образуют строку_данных:

    |<------------------------строка_данных------------------------>| 
    |<данные1><данные2><данные3><данные4><данные5><данные6><данные7><данные...>| 
    

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

    |<-----отступ_данныхN----->|<--строка_данныхN->| 
    |<данные1данные2данные3данные...>|<нужные_нам_данные>| 
    

    ПРИМЕРЫ

    Предположим, что у нас есть xpak, содержащий два фрагмента данных. Один из них именуется "file1" и содержит строку "ddDddDdd", а другой - "file2" и содержит строку "jjJjjJjj". Данные не содержат "STOP" или отступ_xpak, поскольку данный xpak не является частью бинарного пакета.

    Вот вывод шестнадцатиричных данных (построчно):

    00  58 50 41 4b 50 41 43 4b  00 00 00 20 00 00 00 10  |XPAKPACK... ....| 
    10  00 00 00 04 66 69 6c 31  00 00 00 00 00 00 00 08  |....файл1........| 
    20  00 00 00 04 66 69 6c 32  00 00 00 08 00 00 00 08  |....файл2........| 
    30  64 64 44 64 64 44 64 64  6a 6a 4a 6a 6a 4a 6a 6a  |ddDddDddjjJjjJjj| 
    40  58 50 41 4b 53 54 4f 50                           |XPAKSTOP| 
    

    Строка_индекса имеет значение 32, а строка_данных - 16 (поскольку данные содержат 16 байт: "ddDddDdd" и "jjJjjJjj").

       |<------"XPAKPACK"----->||    32     |    16     | 
    00  58 50 41 4b 50 41 43 4b  00 00 00 20 00 00 00 10 
    

    А вот первый элемент индекса, значение строки_имени которого составляет 4, за ней идет строка "файл1", далее - отступ данных1 со значением 0 и данные1 со значением 8 (поскольку данные1 содержат 8 байт: "ddDddDdd"):

       |     4     |<--"файл1"->||отступ_данных1:0|строка_данных1:8| 
    10  00 00 00 04 66 69 6c 31  00 00 00 00 00 00 00 08 
    

    Теперь рассмотрим второй элемент индекса, со значением строки_индекса 4; за ней идет строка индекса "файл2", отступ_данных2 со значением 8 и данные2 со значением 8 (поскольку данные2 содержат 8 байт: "jjJjjJjj").

       |     4     |<--"файл2"->||отступ_данных2:8|строка_данных2:8| 
    20  00 00 00 04 66 69 6c 32  00 00 00 08 00 00 00 08 
    

       |<------"XPAKSTOP"----->| 
    40  58 50 41 4b 53 54 4f 50 
    

    АВТОРЫ

    СМ. ТАКЖЕ

    qtbz2(1), quickpkg(1), qxpak(1)

    ПЕРЕВОД

     
     

    Октябрь 2011


    Поиск по тексту MAN-ов: 




    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру