ldfhread 子例程

用途

读取 XCOFF 文件的文件头。

对象文件访问例程库 (libld.a)

语法

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

int ldfhread ( ldPointer,  FileHeader)
LDFILE *ldPointer;
void *FileHeader;

描述

ldfhread 子例程将当前与 ldPointer 参数关联的对象文件的文件头读取到从 FileHeader 参数开始的内存区域中。 调用例程负责提供指向足以包含关联对象文件的文件头的缓冲区的指针。 由于 ldopen 子例程提供幻数信息 (通过 HEADER(ldPointer).f_magic 宏) ,因此调用应用程序可以始终确定 FileHeader 指针是应该引用 32 位 FILHDR 还是 64 位 FILHDR_64 结构。

参数

描述
ldPointer 指向由于成功调用 ldopenldaopen 子例程而返回的 LDFILE 结构。
FileHeader 根据正在读取的文件的对象方式,指向足以容纳 FILHDR 结构的缓冲区。

返回值

ldfhread 子例程返回 "成功" 或 "失败"。

错误代码

如果 ldfhread 子例程无法读取文件头,那么它将失败。

注: 在大多数情况下,可以通过使用 ldfcn.h 文件中定义的 HEADER (ldPointer) 宏来避免使用 ldfhread 。 可以使用 header (ldPointer) fieldname 宏来访问头文件的任何字段或字段名称中的信息。

示例

以下是用于打开对象文件,确定其方式以及使用 ldfhread 子例程获取文件头的代码示例。 此代码将与定义的 _XCOFF32__XCOFF64_ 一起编译:

#define __XCOFF32__
#define __XCOFF64__

#include <ldfcn.h>


/* for each FileName to be processed */

if ( (ldPointer = ldopen(fileName, ldPointer)) != NULL)
{
    FILHDR    FileHead32;
    FILHDR_64 FileHead64;
    void      *FileHeader;

    if ( HEADER(ldPointer).f_magic == U802TOCMAGIC )
        FileHeader = &FileHead32;
    else if ( HEADER(ldPointer).f_magic == U803XTOCMAGIC )
        FileHeader = &FileHead64;
    else
        FileHeader = NULL;

    if ( FileHeader && (ldfhread( ldPointer, FileHeader ) == SUCCESS) )
    {
        /* ...successfully read header... */
        /* ...process according to magic number... */
    }
}