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 для позиционирования относительно конца архивного файла, поскольку конец архивного файла не обязательно совпадает с концом одного из содержащих- ся в архиве объектных файлов.