LDFCN(4)
НАЗВАНИЕ
ldfcn - программы доступа к об ектным файлам обычного
формата
СИНТАКСИС
#include <stdio.h>
#include <filehdr.h>
#include <ldfcn.h>
ОПИСАНИЕ
Программы доступа к об ектным файлам обычного формата
это совокупность функций, обеспечивающих чтение об ектных файлов и архивов, содержащих объектные файлы. Хотя
вызывающая программа должна "знать" детали структуры
обрабатываемых ею частей об ектного файла, использование программ доступа исключает необходимость знания
структуры файла в целом.
Интерфейс между вызывающей программой и программами
доступа основан на определяемом типе LDFILE. Тип определен во включаемом файле <ldfcn.h> как структура
struct ldfile. Основное назначение этой структуры
- обеспечить унифицированный доступ как к отдельным
об ектным файлам, так и к архивам объектных файлов.
Функция ldopen(3X) размещает и инициализирует структуру
LDFILE, возвращая в вызывающую программу указатель на
структуру. Доступ к полям структуры LDFILE обеспечивается макросами, определенными в <ldfcn.h>:
- LDFILE *ldptr;
- TYPE (ldptr)
- Магическое число, служащее для различения элементов архива и отдельных объектных файлов.
- IOPTR (ldptr)
- Указатель на файл, возвращаемый функцией
fopen, и используемый стандартными функциями ввода/вывода.
- OFFSET (ldptr)
- Файловый адрес начала объектного файла;
не 0, если файл является элементом архива.
- HEADER (ldptr)
- Структура заголовка объектного файла.
Функции доступа подразделяются на 4 группы:
- Открытие и закрытие объектного файла:
- ldopen(3X) и ldaopen [см. ldopen(3X)]
- (открытие объектного файла);
- ldclose(3X) и ldaclose [см. ldclose(3X)]
- (закрытие объектного файла).
- Чтение заголовков, данных из таблицы имен и информации о номерах строк:
- ldahread(3X)
- (чтение архивного заголовка элемента архивного файла);
- ldfhread(3X)
- (чтение заголовка объектного файла);
- ldshread(3X) и ldnshread [см. ldshread(3X)]
- (чтение заголовка секции объектного файла);
- ldtbread(3X)
- (чтение элемента таблицы имен объктного файла);
- ldgetname(3X)
- (получение символического имени из элемента
таблицы имен или из таблицы цепочек);
- ldlread(3X), ldlinit, ldlitem [см. ldlread(3X)]
- (работа с таблицей номеров строк).
- Поиск начала секции, информации о настройке ссылок
или таблицы номеров строк, относящихся к определенной секции:
- ldohseek(3X)
- (поиск необязательного заголовка объектного
файла);
- ldsseek(3X) и ldnsseek [см. ldsseek(3X)]
- (поиск секции объектного файла);
- ldrseek(3X) и ldnrseek [см. ldrseek(3X)]
- (поиск информации о настройке ссылок);
- ldlseek(3X) и ldnlseek [см. ldlseek(3X)]
- (поиск таблицы номеров строк);
- ldtbseek(3X)
- (поиск таблицы имен объектного файла).
- Получение индекса элемента таблицы имен об ектного
файла:
- ldtbindex(3X)
Эти функции детально описаны в соответствующих разделах
Справочника.
После успешного поиска (функциями третьей группы) текущая позиция в файле устанавливается на начало найденной
информации.
Все функции, кроме ldopen(3X), ldgetname(3X) и
ldtbindex(3X), возвращают значения SUCCESS или FAILURE
(эти константы определены во включаемом файле
<ldfcn.h>). Ldopen(3Х) и ldaopen [см. ldopen(3Х)] возвращают указатель на структуру 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(3S), ldahread(3X), ldclose(3X), ldgetname(3X),
ldfhread(3X), ldlread(3X), ldlseek(3X), ldohseek(3X),
ldopen(3X), ldrseek(3X), ldsseek(3X), ldshread(3X),
ldtbindex(3X), ldtbread(3X), ldtbseek(3X), stdio(3S),
intro(5).
ПРЕДОСТЕРЕЖЕНИЯ
Макрос FSEEK, определенный в файле <ldfcn.h>, обращается к стандартной функции ввода/вывода fseek(3S). Нельзя
использовать FSEEK для позиционирования относительно
конца архивного файла, поскольку конец архивного файла
не обязательно совпадает с концом одного из содержащихся в архиве объектных файлов.