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