Unix Man (Справочное руководство)

         

LDFCN(4)


LDFCN(4)

НАЗВАНИЕ


ldfcn - программы доступа к об ектным файлам обычного формата

СИНТАКСИС

#include <stdio.h> #include <filehdr.h> #include <ldfcn.h>

ОПИСАНИЕ


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

Интерфейс между вызывающей программой и программами доступа основан на определяемом типе LDFILE. Тип определен во включаемом файле <ldfcn.h> как структура struct ldfile. Основное назначение этой структуры - обеспечить унифицированный доступ как к отдельным об ектным файлам, так и к архивам объектных файлов.

Функция размещает и инициализирует структуру LDFILE, возвращая в вызывающую программу указатель на структуру. Доступ к полям структуры LDFILE обеспечивается макросами, определенными в <ldfcn.h>:

LDFILE *ldptr; TYPE (ldptr) Магическое число, служащее для различения элементов архива и отдельных объектных файлов. IOPTR (ldptr) Указатель на файл, возвращаемый функцией fopen, и используемый стандартными функциями ввода/вывода. OFFSET (ldptr) Файловый адрес начала объектного файла; не 0, если файл является элементом архива. HEADER (ldptr) Структура заголовка объектного файла.

Функции доступа подразделяются на 4 группы:

  1. Открытие и закрытие объектного файла:

    ldopen(3X) и ldaopen [см. ] (открытие объектного файла); ldclose(3X) и ldaclose [см. ] (закрытие объектного файла).

  2. Чтение заголовков, данных из таблицы имен и информации о номерах строк:

    ldahread(3X) (чтение архивного заголовка элемента архивного файла); ldfhread(3X) (чтение заголовка объектного файла); ldshread(3X) и ldnshread [см. ] (чтение заголовка секции объектного файла); ldtbread(3X) (чтение элемента таблицы имен объктного файла); ldgetname(3X) (получение символического имени из элемента таблицы имен или из таблицы цепочек); ldlread(3X), ldlinit, ldlitem [см. ] (работа с таблицей номеров строк).


  3. Поиск начала секции, информации о настройке ссылок или таблицы номеров строк, относящихся к определенной секции:



    ldohseek(3X) (поиск необязательного заголовка объектного файла); ldsseek(3X) и ldnsseek [см. ] (поиск секции объектного файла); ldrseek(3X) и ldnrseek [см. ] (поиск информации о настройке ссылок); ldlseek(3X) и ldnlseek [см. ] (поиск таблицы номеров строк); ldtbseek(3X) (поиск таблицы имен объектного файла).


  4. Получение индекса элемента таблицы имен об ектного файла:

    ldtbindex(3X)


  5. Эти функции детально описаны в соответствующих разделах Справочника.

    После успешного поиска (функциями третьей группы) текущая позиция в файле устанавливается на начало найденной информации.

    Все функции, кроме , и , возвращают значения SUCCESS или FAILURE (эти константы определены во включаемом файле <ldfcn.h>). Ldopen(3Х) и ldaopen [см. ] возвращают указатель на структуру LDFILE.

    Дополнительные средства доступа к объектному файлу обеспечиваются набором макросов, определенных в файле <ldfcn.h>. Эти макросы являются прямыми аналогами стандартных функций ввода/вывода, осуществляющим чтение и обработку файлов. Макросы используют поле дескриптора файла из структуры LDFILE.

    Предоставляются следующие макросы:

    GETC (ldptr) FGETC (ldptr) GETW (ldptr) UNGETC (c, ldptr) FGETS (ldptr) FREAD ((char *) ptr, sizeof (*ptr), nitems, ldptr) FSEEK (ldptr, offset, ptrname) FTELL (ldptr) REWIND (ldptr) FEOF (ldptr) FERROR (ldptr) FILENO (ldptr) SETBUF (ldptr, buf) STROFFSET (ldptr)

    Макрос STROFFSET вычисляет адрес таблицы цепочек. Относительно других макросов следует обратиться к описаниям соответствующих стандартных функций ввода/вывода.

    При редактировании связей вызывающей программы следует подключить библиотеку программ доступа к объектным файлам libld.a.

    СМ. ТАКЖЕ



    , , , , , , , , , , , , , , , , .

    ПРЕДОСТЕРЕЖЕНИЯ



    Макрос FSEEK, определенный в файле <ldfcn.h>, обращается к стандартной функции ввода/вывода . Нельзя использовать FSEEK для позиционирования относительно конца архивного файла, поскольку конец архивного файла не обязательно совпадает с концом одного из содержащихся в архиве объектных файлов.


    Содержание раздела