Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ ldopen(3X) — NEWS-os 4.2.1R

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

fopen(3S)

ldclose(3X)

ldfcn(3X)

LDOPEN(3X)  —  NEWS-OS Programmer’s Manual

名称

ldopen, ldaopen, ldreadst − 共通オブジェクトファイルを読み込み用にオープンする

形式

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

LDFILE ∗ldopen (filename, ldptr)
char ∗filename;
LDFILE ∗ldptr;

LDFILE ∗ldaopen (filename, oldptr)
char ∗filename;
LDFILE ∗oldptr;

ldreadst (ldptr, flags)
LDFILE ∗ldptr;
int flags;

解説

ldopen と ldclose(3X) は、単純なオブジェクトファイルのユニフォームアクセス、およびアーカイブ ファイルのメンバであるオブジェクトファイルへのユニフォームアクセスを 提供します。 共通オブジェクトファイルのアーカイブは、あたかもそれが一連の単純な共通 オブジェクトファイルであるかのように処理することができます。

ldptr の値が NULL の場合、 ldopen は filename をオープンし、 LDFILE 構造体を割り当て、初期化し、その構造体を指すポインタを返します。

ldptr が有効で、 TYPE(ldptr) がアーカイブのマジック番号である場合は、 ldopen は、 filename の次のアーカイブメンバ用に LDFILE を再び初期化します。

ldopen と ldclose は協調して作用します。 ldclose は、 TYPE(ldptr) がアーカイブのマジック番号であり、処理予定のアーカイブに別のファイルが 存在する場合にだけ FAILURE を返します。 このときにだけ ldopen は現在の ldptr の値とともに呼び出されなければなりません。 他のすべての場合、そして特に新しい filename がオープンした場合は、 ldopen は、引数 ldptr を NULL にして呼び出されなければなりません。

以下に、 ldopen と ldclose の使用例を示します。

/∗ for each filename to be processed ∗/

ldptr = NULL;
do {
if ((ldptr = ldopen(filename, ldptr)) != NULL) {
/∗ check magic number ∗/
/∗ process the file ∗/
}
} while (ldclose(ldptr) == FAILURE );

oldptr の値が NULL でない場合、 ldaopen は新たに filename をオープンし、新しい LDFILE 構造体を割り当て、初期化し、 oldptr からのフィールドをコピーします。 ldaopen は、新しい LDFILE 構造体を指すポインタを返します。 この新しいポインタは、古いポインタ oldptr とは無関係です。 2 つのポインタを同時に使用して、オブジェクトファイルの別の部分を読み込む ことができます。 たとえば、1 つのポインタを使用して、再配置情報を順番に進んでいき、 もう 1 つのポインタを使用して、インデックスされたシンボルテーブルエントリを 読み込むことができます。

ldopen と ldaopen は filename を読み込み用にオープンします。 filename がオープンできなかったり、 LDFILE 構造体用のメモリが割り当てられない場合は、どちらの関数も NULL を返します。 オープンが成功しても、与えられたファイルが共通オブジェクトファイルまたは アーカイブされたオブジェクトファイルであるという保証はありません。

ldopen は、シンボルテーブルヘッダとファイルディスクリプタテーブルを 読み込みます。 ldptr を使用してさらにアクセスすると、シンボルテーブルの他の適切な セクションが読み込まれます(たとえば、 ldtbread(3X) を呼び出すと、 symbols または externals が読み込まれます)。 シンボルテーブルのセクションをメモリに入れるには、 <cmplrs/stsupport.h> にある ST_P∗ 定数の OR を取ったものを flag に指定して、 ldreadst を呼び出してください。

プログラムは、オブジェクトファイルのアクセスルーチンライブラリ libmld.a とともにロードされなければなりません。

関連事項

fopen(3S), ldclose(3X), ldfcn(3X). 

NEWS-OSRelease 4.2.1R

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026